用nexus搭建自己的maven私有倉庫
环境是:nexus-2.13、maven-3.3.9、jdk-1.7
一、用admin用户登陆nexus
nexus的下载和安装都很简单,网上也有很多介绍,本文就不重复了。主要介绍一下安装之后的配置
nexus的配置需要用admin角色完成,默认的密码是admin123,进入nexus首页之后,点击右上角,进行登录
然后就可以在左边的菜单中进行配置了
二 。。。。。。。。
三、配置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,我们熟悉之后,就可以自行删除、新增、编辑
右边那个Repository Path可以点击进去,看到仓库中artifact列表。不过要注意浏览器缓存。我今天就发现,明明构件已经更新了,在浏览器里却看不到,还以为是BUG,其实是被浏览器缓存了
四、配置Central Repository的proxy
最关键的一个配置,可能就是Central Repository的proxy配置,因为大部分的构件,都是要通过这个proxy得到的
在安装完nexus之后,这个proxy是预置的,需要做的就是把Download Remote Indexes改为true,这样nexus才会从centralrepository下载索引,才能在nexus中使用artifact search的功能
网络上有一些其他公开的maven仓库,可以用同样的办法,在nexus中设置proxy,但是并不是所有maven仓库,都提供了nexus index,这种情况下,就无法建立索引了
五、配置hosted repository
一般会配置3个hosted repository,分别是3rd party、Snapshots、Releases,分别用来保存第三方jar(典型的比如ojdbc6.jar),项目组内部的快照、项目组内部的发布版
这里并没有什么特别的配置,只是Deployment Policy这个选项,一般Snapshots会配置成允许,而Releases和3rd party会设置为禁止
六、配置group repository
前面说过,group其实是一个虚拟的仓库,通过对实体仓库(proxy、hosted)进行聚合,对外暴露一个统一的地址
这里要注意的是,放到左边的仓库,才是会被聚合的仓库。我昨天一直搞错了,把仓库都放到右边,结果group什么都没有聚合到,是一个空的仓库。。。
七、配置用户密码
在Security-->Users中配置,在deployment用户上点击右键,选择Set Password,然后设置一个密码,做这个操作是为了后面提交做准备
八、在用户机器上配置settings.xml
经过前面的7个步骤,nexus就配置好了,接下来需要在每个开发人员的开发机器上进行配置了
配置文件在%USER_HOME%/.m2/settings.xml
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">
- <servers>
- <server>
- <id>nexus-snapshots</id>
- <username>deployment</username>
- <password>deployment</password>
- </server>
- </servers>
- <mirrors>
- <mirror>
- <id>nexus</id>
- <name>internal nexus repository</name>
- <url>http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/</url>
- <mirrorOf>central</mirrorOf>
- </mirror>
- </mirrors>
- </settings>
设置Maven从Nexus私服下载构件
可以设置某个项目从私服下载,设置项目的pom.xml如下:
1 <project> 2 ... 3 <repositories> 4 <repository> 5 <id>nexus</id> 6 <name>Nexus</name> 7 <url>http://202.117.15.193:8010/nexus/content/groups/public/</url> 8 <releases><enabled>true</enabled></releases> 9 <snapshots><enabled>true</enabled></snapshots> 10 </repository> 11 </repositories> 12 <pluginRepositories> 13 <pluginRepository> 14 <id>nexus</id> 15 <name>Nexus</name> 16 <url>http://202.117.15.193:8010/nexus/content/groups/public/</url> 17 <releases><enabled>true</enabled></releases> 18 <snapshots><enabled>true</enabled></snapshots> 19 </pluginRepository> 20 </pluginRepositories> 21 ... 22 </project>
但是这需要为每个项目配置一下,有可能你仅仅需要为你开发的所有项目都用这同一个私服,那么很好,settings.xml提供了profile来设置:
1 <settings> 2 ... 3 <profiles> 4 <profile> 5 <id>nexus</id> 6 <repositories> 7 <repository> 8 <id>nexus</id> 9 <name>Nexus</name> 10 <url>http://202.117.15.193:8010/nexus/content/groups/public/</url> 11 <releases><enabled>true</enabled></releases> 12 <snapshots><enabled>true</enabled></snapshots> 13 </repository> 14 </repositories> 15 <pluginRepositories> 16 <pluginRepository> 17 <id>nexus</id> 18 <name>Nexus</name> 19 <url>http://202.117.15.193:8010/nexus/content/groups/public/</url> 20 <releases><enabled>true</enabled></releases> 21 <snapshots><enabled>true</enabled></snapshots> 22 </pluginRepository> 23 </pluginRepositories> 24 </profile> 25 </profiles> 26 <activeProfiles> 27 <activeProfile>nexus</activeProfile> 28 </activeProfiles> 29 ... 30 </settings>
上面的配置是针对下载构件的,如果所有的下载都从私服上进行,就需要配置镜像了!如下所示:
1 <settings> 2 ... 3 <mirrors> 4 <mirror> 5 <id>nexus</id> 6 <mirrorOf>*</mirrorOf> 7 <url>http://202.117.15.193:8010/nexus/content/groups/public/</url> 8 </mirror> 9 </mirrors> 10 <profiles> 11 <profile> 12 <id>nexus</id> 13 <repositories> 14 <repository> 15 <id>central</id> 16 <url>http://central</url> 17 <releases><enabled>true</enabled></releases> 18 <snapshots><enabled>true</enabled></snapshots> 19 </repository> 20 </repositories> 21 <pluginRepositories> 22 <pluginRepository> 23 <id>central</id> 24 <url>http://central</url> 25 <releases><enabled>true</enabled></releases> 26 <snapshots><enabled>true</enabled></snapshots> 27 </pluginRepository> 28 </pluginRepositories> 29 </profile> 30 </profiles> 31 <activeProfiles> 32 <activeProfile>nexus</activeProfile> 33 </activeProfiles> 34 ... 35 </settings>
九、配置maven项目的pom文件
下面是简化后的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>com.huawei.inoc.wfm.task</groupId>
- <artifactId>task-sla</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>task-sla</name>
- <!-- 配置部署的远程仓库 -->
- <distributionManagement>
- <snapshotRepository>
- <id>nexus-snapshots</id>
- <name>nexus distribution snapshot repository</name>
- <url>http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/</url>
- </snapshotRepository>
- </distributionManagement>
- </project>
这里配置了<distributionManagement>元素,其中的<id>nexus-snapshots</id>,与前面说的settings.xml中的<servers>元素中的配置必须一致
配置这个的目的,是当执行maven deploy时,才知道要将生成的构件部署到哪个远程仓库上,注意这里的URL填的就不是public group的地址:
http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/
而是snapshots的地址:
http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/
但是在nexus中,snapshots也是聚合到public group里的,所以开发人员A提交到snapshots的构件,开发人员B也可以从public group里获取到
十、eclipse中的设置
经过前面的配置,已经可以通过命令行进行maven操作了。不过实际开发中,一般都是使用eclipse的m2e插件,所以还需要对eclipse进行一些额外的配置
在Preferences-->Maven-->User Settings中,点击Update Settings,加载刚才我们对settings.xml的更改
然后在Maven Repositories视图里,可以看到仓库的情况
可以看到,从超级pom继承来的central被置灰了,不可用,后面的mirrored by nexus表示对该仓库的所有请求,都会转到镜像nexus中
十一、nexus的目录结构
nexus会安装在%USER_HOME%/sonatype-work/nexus下,有以下目录
其中的storage目录,就是构件实际存放的地址了
最后传一个 完整的 maven settings.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">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<name>internal nexus repository</name>
<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
<releases>
<checksumPolicy></checksumPolicy>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
来源:oschina
链接:https://my.oschina.net/u/2754191/blog/688212