一.簡介
Maven默認提供的中央倉庫是在遠程網絡服務Appache提供的,這對於我們開發時不合理的。如果我們沒網了或者什么情況,我們怎么辦?我們需要的jar包中央庫沒有或者是要收費怎么辦?也就是說我們隊中央倉庫的依賴性太大。而Nexus私服則可以解決我們這個問題。
這樣就相當於在我們本地的局域網搭建了一個類似中央倉庫的服務器,我們開始將中央倉庫的一些資料下載到私服務器上,然后平時我們的maven項目就是直接訪問局域網內的私服即可,既節省了網絡帶寬也會加速項目搭建的進程,這樣對我們開發來說,對公司來說都是非常好的選擇。項目內部和項目與項目之間也可以共享jar包,達到代碼的最大化利用。
一般有兩種情況需要我們上傳jar包至nexus,一個是本地項目生成的jar包,另一個是我們從第三方拿過來的的中央庫中不存在的jar包,前者采用maven工程deploy的方法,后者采用手動上傳的方式。
二.手動上傳jar包
GAV Parameters
GAV Parameters方式只能上傳單個jar包,無法攜帶依賴。
示例中使用的jar包為:geogson.jar包,基本信息:
<dependency>
<groupId>com.nsn.geogson</groupId>
<artifactId>geogson</artifactId>
<version>1.0.0</version>
</dependency>
1.首先登陸nexus,進入3rd party,選擇Artifact Upload
2.填寫相應的信息,版本等等
3.添加后提交
4.導入成功后,search該包顯示如下:
From POM
From POM方式,可以將上傳jar包的依賴一起上傳。例如:我們想傳a.jar到私服,但是a.jar還依賴b.jar,假如只傳a.jar到私服,在項目中會因為找不到a.jar的依賴(b.jar)而報錯。
當需要導入DB2驅動時,需要db2jcc.jar,而db2jcc.jar又要依賴db2jcc_license_cu.jar,此時,導入方式如下
1.編寫POM
手動編寫db2jcc.jar的pom.xml,如下:
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>xxx.xxx.db2driver</groupId>
<artifactId>db2jcc</artifactId>
<packaging>jar</packaging>
<version>1.0.0</version>
<name>db2jcc</name>
<dependencies>
<dependency>
<groupId>xxx.xxx.db2driver</groupId>
<artifactId>db2jcc-license-cu</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
2.在Nuxus的GUI中導入
導入方式如下:
3.導入依賴的jar
導入依賴的db2jcc_license_cu.jar,如下:
注意這里的配置必須按照1中的配置。
最后,確保所有依賴的jar全部導入進第三方宿主倉庫后,就可以在工程中引入,配置如下:
<dependency>
<groupId>xxx.xxx.db2driver</groupId>
<artifactId>db2jcc</artifactId>
<version>1.0.0</version>
</dependency>
三.命令行自動上傳
1.如果本機安裝了Maven服務, 可在${MAVEN_HOME}/conf/setting.xml中指定私服相關的配置
<!-- 在servers標簽下配置server, 包括: 私服的用戶名和密碼, 在deploy項目時需要用到 -->
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
<!-- 在profiles標簽下配置profile, 包括: 私服所配的倉庫、各個插件的倉庫地址 -->
<profile>
<!-- profile的id -->
<id>dev</id>
<repositories>
<repository>
<!-- 倉庫id, Repositories可以配置多個倉庫, 要確保id不重復 -->
<id>nexus</id>
<!-- 倉庫地址, 即nexus倉庫組的地址 -->
<url>http://ip:port/nexus/content/groups/public/</url>
<!-- 是否下載Releases構件 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否下載Snapshots構件 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!-- 插件倉庫, Maven的運行依賴插件, 也需要從私服下載插件 -->
<pluginRepository>
<!-- 插件倉庫的id不允許重復, 如果重復, 后配置的優先 -->
<id>public</id>
<name>Public Repositories</name>
<url>http://ip:port/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
<!-- 還需指定聯網倉庫, 保證本私服中沒有相關jar包或插件時可聯網獲取 -->
<profile>
<id>internet</id>
<repositories>
<repository>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<layout>default</layout>
<!-- 這里配置阿里雲的倉庫 -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
</profile>
2.在項目的pom.xml中的一級標簽project下添加如下內容:
<!-- 發布選項: id必須與setting.xml文件中server的id相同 -->
<distributionManagement>
<repository>
<id>releases</id>
<name>display</name>
<url>http://ip:port/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>display</name>
<url>http://ip:port/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
3.使用IDEA發布項目
以IDEA為例, 選中項目, 右鍵 -> Run Maven -> deploy
或者在右邊欄選中Maven欄目, 點擊項目 -> Lifecycle -> deploy, 執行即可將項目發布到倉庫中去
4.使用發布項目
/usr/local/maven/bin/mvn clean deploy -e -U
注意: 倉庫中不能存在與當前項目名稱+版本號相同的項目, 否則將導致出錯: Bad Request: 400