天天看點

Nexus Repository OSS 3安裝配置使用

Nexus Repository OSS 3是一個開源的倉庫管理系統,提供了更加豐富的功能,而且安裝、配置、使用起來也更加簡單友善。OSS 3版本主要支援的倉庫(Repository)包括如下:

  • bower
  • docker
  • maven
  • npm
  • nuget
  • pypi
  • raw
  • rubygems
  • yum

其中,對于上述每種類型的Nexus倉庫,都分别具有如下主要3種類型:

hosted:本地倉庫,可以将我們内部使用的一些Maven項目,釋出到該類型倉庫,供内部開發人員使用。

proxy:代理倉庫,用來代理遠端公共倉庫,比如Maven中央倉庫。

group:倉庫組,用來合并多個類型(hosted/proxy)的倉庫。

這裡,我們主要以支援Java程式設計的Maven項目依賴管理和建構進行實踐,Nexus版本為nexus-3.7.0-04。

安裝配置

下載下傳Nexus Repository Manager軟體包:

wget https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.7.0-04-unix.tar.gz
tar xvzf nexus-3.7.0-04-unix.tar.gz
           

解壓縮後可以看到,生成nexus-3.7.0-04和sonatype-work兩個目錄:

[[email protected] nexus]# ls
nexus-3.7.0-04  sonatype-work
           

是這兩個目錄在同一個目錄下,例如我這裡是在nexus目錄下面。

可以在etc/nexus-default.properties配置檔案中,修改對應的配置項,滿足實際需要,這裡我直接使用預設的,其它可以使用的配置可以參考官網說明。

如果使用自定義的JDK,可以增加如下配置

export JAVA_HOME=/usr/local/java/jdk1.8.0_144/
           

啟動Nexus Repository Manager,執行如下指令:

bin/nexus start
           

然後,可以通過Web頁面登入浏覽,連結如下所示:

http://172.16.117.65:8081

預設使用者admin,預設密碼為admin123,根據自己的需要修改密碼,保證Nexus的安全。

Nexus Repository Manager也提供了友善的管理使用者和權限的基礎功能,可以登入到Web管理頁面上進行管理配置,如下圖所示:

Nexus Repository OSS 3安裝配置使用

釋出管理

我們需要将自己的Maven項目建構後,釋出到Nexus中,供其它項目使用,是以需要進行相關配置,并且具有一定權限才能向Nexus倉庫中釋出。

首先,在settings.xml檔案中進行配置,配置内容如下所示:

<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">

    <localRepository>/Users/yanjun/.m2/repository</localRepository>
    <servers>
         <server>
           <id>maven-releases</id>
           <username>admin</username>
           <password>xxxxxxxxxxxxxxxx</password>
        </server>
         <server>
           <id>maven-snapshots</id>
           <username>admin</username>
           <password>xxxxxxxxxxxxxxxx</password>
        </server>
     </servers>
</settings>
           

然後,在待要釋出到Nexus倉庫的Maven項目的pom.xml檔案中,增加釋出管理配置,如下所示:

<distributionManagement>
        <repository>
            <id>maven-releases</id>
            <name>Nexus ReleaseRepository</name>
            <url>http://172.16.117.65:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>maven-snapshots</id>
            <name>Nexus SnapshotRepository</name>
            <url>http://172.16.117.65:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
           

需要保證,pom.xml中distributionManagement中的id與setting.xml中配置的server中的id必須相同,才能釋出。

最後,執行如下指令釋出到Nexus的Snapshots倉庫:

cd /Users/yanjun/Workspaces/idea-workspace/azkaban-app-deployer
mvn -s ~/settings.xml deploy
           

執行上述指令,釋出到Nexus的Snapshots倉庫的過程,如下所示:

azkaban-app-deployer git:(master) ✗ mvn -s ~/settings.xml deploy
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building azkaban-app-deployer 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ azkaban-app-deployer ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5:compile (default-compile) @ azkaban-app-deployer ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ azkaban-app-deployer ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/yanjun/Workspaces/idea-workspace/azkaban-app-deployer/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5:testCompile (default-testCompile) @ azkaban-app-deployer ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ azkaban-app-deployer ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ azkaban-app-deployer ---
[INFO] Building jar: /Users/yanjun/Workspaces/idea-workspace/azkaban-app-deployer/target/azkaban-app-deployer-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-assembly-plugin:2.4.1:single (make-assembly) @ azkaban-app-deployer ---
[INFO] Building jar: /Users/yanjun/Workspaces/idea-workspace/azkaban-app-deployer/target/azkaban-app-deployer-0.0.1-SNAPSHOT-jar-with-dependencies.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ azkaban-app-deployer ---
[INFO] Installing /Users/yanjun/Workspaces/idea-workspace/azkaban-app-deployer/target/azkaban-app-deployer-0.0.1-SNAPSHOT.jar to /Users/yanjun/.m2/repository/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/azkaban-app-deployer-0.0.1-SNAPSHOT.jar
[INFO] Installing /Users/yanjun/Workspaces/idea-workspace/azkaban-app-deployer/pom.xml to /Users/yanjun/.m2/repository/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/azkaban-app-deployer-0.0.1-SNAPSHOT.pom
[INFO] Installing /Users/yanjun/Workspaces/idea-workspace/azkaban-app-deployer/target/azkaban-app-deployer-0.0.1-SNAPSHOT-jar-with-dependencies.jar to /Users/yanjun/.m2/repository/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/azkaban-app-deployer-0.0.1-SNAPSHOT-jar-with-dependencies.jar
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ azkaban-app-deployer ---
Downloading: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/maven-metadata.xml
Uploading: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/azkaban-app-deployer-0.0.1-20180102.065956-1.jar
Uploaded: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/azkaban-app-deployer-0.0.1-20180102.065956-1.jar (36 kB at 3.7 kB/s)
Uploading: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/azkaban-app-deployer-0.0.1-20180102.065956-1.pom
Uploaded: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/azkaban-app-deployer-0.0.1-20180102.065956-1.pom (3.8 kB at 416 B/s)
Downloading: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/maven-metadata.xml
Uploading: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/maven-metadata.xml
Uploaded: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/maven-metadata.xml (780 B at 85 B/s)
Uploading: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/maven-metadata.xml
Uploaded: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/maven-metadata.xml (290 B at 31 B/s)
Uploading: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/azkaban-app-deployer-0.0.1-20180102.065956-1-jar-with-dependencies.jar
Uploaded: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/azkaban-app-deployer-0.0.1-20180102.065956-1-jar-with-dependencies.jar (3.8 MB at 172 kB/s)
Uploading: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/maven-metadata.xml
Uploaded: http://172.16.117.65:8081/repository/maven-snapshots/cn/xiweiai/azkaban-app-deployer/0.0.1-SNAPSHOT/maven-metadata.xml (1.0 kB at 110 B/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:13 min
[INFO] Finished at: 2018-01-02T15:01:05+08:00
[INFO] Final Memory: 20M/274M
[INFO] ------------------------------------------------------------------------
           

可以登入到Nexus Repository Manager中,檢視已經釋出項目jar的Snapshots檔案,示例如下圖所示:

Nexus Repository OSS 3安裝配置使用

需要說明的是,我們在Maven項目的pom.xml檔案中 ,如果版本号中含有SNAPSHOT,則會自動釋出到Snapshots倉庫中,例如:

<groupId>cn.xiweiai</groupId>
    <artifactId>azkaban-app-deployer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
           

如果将version的值改為不帶SNAPSHOT字尾,則會釋出到releases倉庫中,根據實際需要進行選擇。

使用倉庫

安裝配置好我們私有的Maven倉庫,如果我們想使用我們内部釋出到Nexus中的Maven依賴,可以直接配置Release Repository:

<repositories>
        <repository>
            <id>maven-releases</id>
            <name>Nexus ReleaseRepository</name>
            <url>http://172.16.117.65:8081/repository/maven-releases/</url>
        </repository>
    </repositories>
           

也可以通過使用group類型的倉庫,隻需要在Maven項目的pom.xml檔案中增加如下配置即可:

<repositories>
        <repository>
            <id>nexus</id>
            <url>http://172.16.117.65:8081/repository/maven-public/</url>
        </repository>
    </repositories>
           

上述配置的該倉庫是group類型的倉庫組,它會将hosted和proxy類型的倉庫合并起來,即:我們在pom.xml中配置依賴時,如果是我們内部的依賴,則會從hosted類型的倉庫中去加載;如果是一些開源的依賴,則會通過proxy類型的倉庫,代理轉發到外部倉庫中下載下傳。如果有其它更多非group類型的倉庫,也會從這些倉庫中查找依賴資源。

參考連結

  • https://www.sonatype.com/download-oss-sonatype
  • http://books.sonatype.com/nexus-book/3.5/reference/index.html