Nexus私服搭建、配置、上傳snapshot


轉載:https://blog.csdn.net/BuptZhengChaoJie/article/details/51683672
實驗室需要有一個比較大的項目,想要把功能盡可能細分。這里使用maven來管理項目。項目被細分為project-parent、project-war、project-a、project-b。其中后三個項目只是集成parent的pom的一些jar包,並不是模塊關系。然后本人搭建了一個私服,想要從私服上下載jar包。 
Nexus安裝 
關於安裝教程見私服安裝教程和原理 


Nexus配置 

一、搭建完私服,使用默認賬號登錄admin/admin123 
登錄成功后界面

二、配置repository 
在Views/Repositories–>Repositories里進行配置。 
這里寫圖片描述

nexus里可以配置3種類型的倉庫,分別是proxy、hosted、group

proxy是遠程倉庫的代理。比如說在nexus中配置了一個central repository的proxy,當用戶向這個proxy請求一個artifact,這個proxy就會先在本地查找,如果找不到的話,就會從遠程倉庫 下載,然后返回給用戶,相當於起到一個中轉的作用。

hosted是宿主倉庫,用戶可以把自己的一些構件,deploy到hosted中,也可以手工上傳構件到hosted里。比如說oracle的驅動程序,ojdbc6.jar,在central repository是獲取不到的,就需要手工上傳到hosted里。

group是倉庫組,在maven里沒有這個概念,是nexus特有的。目的是將上述多個倉庫聚合,對用戶暴露統一的地址,這樣用戶就不需要在pom中配置多個地址,只要統一配置group的地址就可以了。

nexus裝好之后,已經初始化定義了一些repository,我們熟悉之后,就可以自行刪除、新增、編輯。這里博主刪了Apache snapshot等。右邊那個Repository Path可以點擊進去,看到倉庫中artifact列表。

 

三、配置Central Repository 
這個代理是最重要的,因為我們大部分依賴的jar包都是從這里下載的。 
這里寫圖片描述
這個代理是nexus預置的,這里已經將需要修改的部分修改。主要是Download Remote Indexes改為true,這樣nexus才會從central repository下載索引,才能在nexus中使用artifact search的功能 。網絡上有一些其他公開的maven倉庫,可以用同樣的辦法,在nexus中設置proxy,但是並不是所有maven倉庫,都提供了nexus index,這種情況下,就無法建立索引了。

四、配置預置的Hosted Repository 
這里預置的三個hosted repository分別是3rd party、Snapshot、Releases。它們的作用分別是:

1、3rd用來保存第三方jar包;
2、Snapshot用來保存項目組內部的快照;
3、Releases項目組內部的發布版;

這里需要修改的是,將Snapshot中的Deployment Policy這個選項設置為Allow Redeploy。Releases和3rd party設置為禁止。 
這里寫圖片描述

 

五、配置group repository

group其實是一個虛擬的倉庫,通過對實體倉庫(proxy、hosted)進行聚合,對外暴露出一個統一的地址,這樣在我們引入私服地址的時候,不需要寫太多個地址(其實就是central、Releases、3rd party、Snapshot的集合)。 
這里寫圖片描述

 

六、配置用戶密碼

在Security–>Users中配置,在deployment用戶上點擊右鍵,選擇Set Password,然后設置一個密碼,做這個操作是為了后面提交做准備。 
這里寫圖片描述

 

七、配置eclipse的setting.xml 
在新版的eclipse中,已經內置了maven插件。找到setting文件。 
這里寫圖片描述
這里寫圖片描述

附上setting.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <!--本地maven倉庫,根據需要修改-->
    <localRepository>D:\00Coding\apache-maven\repo</localRepository>
    <pluginGroups>
    </pluginGroups>
    <proxies>
    </proxies>
    <servers>
        <server>
            <id>nexus-snapshots</id>
            <username>deployment</username>
            <password>deployment</password>
        </server>
        <server>
            <id>nexus-releases</id>
            <username>deployment</username>
            <password>deployment</password>
        </server>
    </servers>
    <mirrors>
        <mirror>
            <id>nexus</id>
            <name>public group</name>
            <url>http://192.168.2.176:9981/nexus/content/groups/public/</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
    </mirrors>
</settings>

這里只配置了2個元素mirrors和servers。首先這里配置了一個id為nexus的鏡像倉庫,地址是前面配置的public group的URL,然后鏡像目標是central。 
這里插入一個maven源碼中的超級pom(maven是一個開源的軟件,感興趣可以查看源碼),我們看到里面配置了這樣一段:

~~~
<repositories>  
    <repository>  
      <id>central</id>  
      <name>Central Repository</name>  
      <url>http://repo.maven.apache.org/maven2</url>  
      <layout>default</layout>  
      <snapshots>  
        <enabled>false</enabled>  
      </snapshots>  
    </repository>  
  </repositories>  

  <pluginRepositories>  
    <pluginRepository>  
      <id>central</id>  
      <name>Central Repository</name>  
      <url>http://repo.maven.apache.org/maven2</url>  
      <layout>default</layout>  
      <snapshots>  
        <enabled>false</enabled>  
      </snapshots>  
      <releases>  
        <updatePolicy>never</updatePolicy>  
      </releases>  
    </pluginRepository>  
  </pluginRepositories>  
  ~~~

因此,當本地的maven項目,找不到需要的構件(包括jar包和插件)的時候,默認會到central里獲取 
所以我們剛剛配置的鏡像倉庫,mirrorOf也是central,這樣本地maven項目對central repository的請求,就會轉到鏡像倉庫上,也就是我們設置的nexus私服上。由於我們在項目的pom里,不會再配置其他的repositories和pluginRepositories元素,所以只要配置一個central的mirror,就足以阻止所有的外網訪問。如果pom中還配置了其他的外網倉庫,比如jboss repository等,可以把mirrorOf改為*。 
至於servers元素,是因為我們把項目內部的構件上傳到nexus的倉庫中時,nexus會進行權限控制,所以這里需要設置 權限相關的信息。注意這里的id是nexus-snapshots,以及nexus-releases。后面maven工程里的pom設置是一致的。可以在servers里面配置多個server,比如nexus-releases可以對應是發布版本,nexus-Snapshot是項目快照版本。

八、配置maven項目的pom文件

這里寫圖片描述

這里parent是打成pom形式,主要是對jar的一些維護。直接看私服部署到私服nexus上的配置吧! 
這里寫圖片描述

這里配置了distributionManagement元素,其中的id屬性的值nexus-snapshots與前面說的settings.xml中的servers元素中的配置必須一致。配置這個的目的,是當執行maven deploy時,才知道要將生成的構件部署到哪個遠程倉庫上,注意這里的URL填的就不是public group的地址,而是snapshots的地址: 
http://192.168.2.176:9981/nexus/content/repositories/snapshots/ 
但是在nexus中,snapshots也是聚合到public group里的,所以開發人員A提交到snapshots的構件,開發人員B也可以從public group里獲取到。 
附上parent.pom,包含了一些springmvc需要的依賴。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.cincc.crm</groupId>
    <artifactId>crm-parent</artifactId>
    <version>3.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- spring版本號 -->
        <spring.version>4.3.0.RELEASE</spring.version>

        <!-- mybatis版本號 -->
        <mybatis.version>3.4.0</mybatis.version>

        <!-- log4j日志文件 版本號 -->
        <slf4j.version>1.7.21</slf4j.version>
        <log4j.version>1.2.17</log4j.version>

        <!-- mybatis-spring版本號 -->
        <mybatis-spring.version>1.3.0</mybatis-spring.version>

        <!-- mysql版本號 -->
        <mysql.version>5.1.39</mysql.version>

        <!-- com.alibaba druid版本號 -->
        <druid.version>1.0.20</druid.version>

        <!-- jackson版本號 -->
        <jackson.version>2.7.4</jackson.version>

        <!-- json版本號 -->
        <json.version>1.9.13</json.version>

        <!-- lucene版本號 -->
        <lucene.version>6.0.1</lucene.version>

        <!-- commons-fileupload.version -->
        <commons-fileupload.version>1.3.2</commons-fileupload.version>
        <!-- servlet版本包 -->
        <servlet.version>2.5</servlet.version>

    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- junit測試包 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>

            <!-- spring核心包 -->
            <!-- springframe start -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-oxm</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- springframe end -->

            <!-- mybatis核心包 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

            <!-- mybatis/spring包 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>
            <!-- mysql驅動包 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

            <!-- 阿里巴巴數據源包 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <!-- jackson -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <!-- json數據 -->
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>${json.version}</version>
            </dependency>

            <!-- 日志文件管理包 -->
            <!-- log start -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <!-- log end -->

            <!-- lucene -->
            <dependency>
                <groupId>org.apache.lucene</groupId>
                <artifactId>lucene-core</artifactId>
                <version>${lucene.version}</version>
            </dependency>
            <!-- commons-fileupload -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>${commons-fileupload.version}</version>
            </dependency>
            <!-- servlet api -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>${servlet.version}</version>
                <scope>provided</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>
    <!-- 配置部署的遠程倉庫 -->
    <distributionManagement>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>Nexus Snapshot Repository</name>
            <url>http://192.168.2.176:9981/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
        <repository>
            <id>nexus-releases</id>
            <name>Nexus Release Repository</name>
            <url>http://192.168.2.176:9981/nexus/content/repositories/releases/</url>
        </repository>
    </distributionManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

九、Eclipse上部署Snapshot到私服。 
選擇你需要部署到私服的項目,首先這個項目應該是一個Snapshot版本。然后右擊,選擇Run As 
這里寫圖片描述
這里寫圖片描述 
保存后,點擊Run就可以了。然后在Nexus上的Snapshot倉庫里就可以看到啦!就是這么簡單。 
然后在project-war中,和引入其他依賴一下,引入這個Snapshot版本的包就行了。 
這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM