雲效提供了企業級Maven私有倉庫服務,用戶可以使用它來託管自己的私有二方庫。用戶也可以自己搭建Maven私服。以下是使用Nexus搭建Maven私服的指南。
本文中使用的是Nexus Repository Manager OSS nexus 3.5.0-02
。下載鏈接爲 https://www.sonatype.com/download-oss-sonatype。安裝和使用請參考其官方文檔。
假設您的Nexus服務器的域名(或者您傾向於直接使用IP也可以)是www.your-repo.com
保證私服公網可見
首先要保證您的私服在公網是可見的,這樣雲效才能從您的私服下載二方包。驗證方式:在一臺您的企業內網之外的機器上執行telnet www.your-repo.com 80
,如果沒有返回錯誤,則表示該私服是公網可見的。
保證私服中的庫不能被匿名下載
Nexus默認的配置,允許匿名下載maven庫中的包。需要將其禁止掉。具體做法如下。
開啓下載包的HTTP認證
在nexus-default.properties
添加一行nexus.browserdetector.disable=true
。重啓nexus。
關閉匿名用戶
保證下圖中Allow anonymous users to access the server
是沒有選中的。
創建用戶上傳和下載二方包的maven庫
在Nexus上創建了一個名爲my-lib-repo
的maven庫。
爲maven庫創建用戶
Nexus會爲您創建的maven庫預置一些權限點,接下來需要創建一個角色,來包含只讀的權限點。
然後再創建一個用戶來使用該角色。用戶名和密碼都是my-lib-repo-reader
。
在settings.xml中添加認證信息
在Maven的的默認settings.xml中找到servers
的部分,添加一個server
配置如下。
<server>
<id>my-lib-repo</id>
<username>my-lib-repo-reader</username>
<password>my-lib-repo-reader</password>
</server>
爲了保證雲效使用該settings.xml
,需要把該settings.xml
文件放置到您的代碼庫的根目錄。
配置pom.xml的下載包順序
爲了讓您的Maven構建先嚐試從maven.aliyun.com
下載包,如果下載不到再從http://www.your-repo.com/repository/my-lib-repo
下載包,需要按照如下的方式配置pom.xml
:
<project>
...
<repositories>
<repository>
<id>aliyun-repo</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
<repository>
<id>my-lib-repo</id>
<url>http://www.your-repo.com/repository/my-lib-repo/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</pluginRepository>
<pluginRepository>
<id>my-lib-repo</id>
<url>http://www.your-repo.com/repository/my-lib-repo/</url>
</pluginRepository>
</pluginRepositories>
...
</project>
您的maven構建無論下載依賴包還是插件包,都會首先嚐試從maven.aliyun.com
下載,如果下載不到,再從http://www.your-repo.com/repository/my-lib-repo/
下載。
發佈二方包
如果您需要發佈二方包,需要給角色my-lib-repo-read
添加相應的權限。
同時要在自己的pom.xml
中添加配置如下:
<distributionManagement>
<repository>
<id>my-lib-repo</id>
<url>http://www.your-repo.com/repository/my-lib-repo/</url>
</repository>
</distributionManagement>
然後就可以在構建配置的build.command
中使用mvn deploy
命令上傳二方包了。
樣例文件如下:
pom.xml
<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>xxx.xxx.xxx</groupId>
<artifactId>your-project</artifactId>
<version>xxx</version>
<!-- 倉庫下載配置 -->
<repositories>
<repository>
<id>aliyun-repo</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
<repository>
<id>my-lib-repo</id>
<url>http://www.your-repo.com/repository/my-lib-repo/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</pluginRepository>
<pluginRepository>
<id>my-lib-repo</id>
<url>http://www.your-repo.com/repository/my-lib-repo/</url>
</pluginRepository>
</pluginRepositories>
<!-- 需要發佈二方包 則打開下列的配置
<distributionManagement>
<repository>
<id>my-lib-repo</id>
<url>http://www.your-repo.com/repository/my-lib-repo/</url>
</repository>
</distributionManagement>
-->
</project>
settings.xml
<settings>
<mirrors>
<mirror>
<id>aliyun-repo</id>
<mirrorOf>central</mirrorOf>
<name>central mirror</name>
<url>http://maven.aliyun.com/mvn/repository</url>
</mirror>
<mirror>
<id>my-lib-repo</id>
<mirrorOf>my-lib-repo</mirrorOf>
<name>private mirror</name>
<url>http:/www.your-repo.com/repository/my-lib-repo/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>my-lib-repo</id>
<username>my-lib-repo-reader</username>
<password>my-lib-repo-reader</password>
</server>
</servers>
</settings>