私服是什么?
私服,即私有服务器,是公司内部Maven项目需要通过其下载依赖包和插件的一个内部maven仓库。Nexus是常用的私用Maven服务器,一般是公司内部使用。
常用功能和介绍
将自己的Maven项目指定到私服地址
从私服下载中央库的项目索引
从私服下载中央库的项目索引
将第三方项目jar上传到私服供其他项目使用
Nexus 安装后,默认端口为8081,访问 http://192.168.x.x:8081/nexus/index.html 打开页面,默认账号密码为:admin/admin123
下面是登录后的截图:
其中左侧菜单中的Repositories比较常用。
一般用到的仓库种类是hosted和proxy。
Hosted代表宿主仓库,用来发布一些第三方不允许的组件,比如Oracle驱动、比如商业软件jar包、公司开发的jar包库。
Proxy代表代理远程的仓库,最典型的就是Maven官方中央仓库、JBoss仓库等等。如果构建的Maven项目的用户电脑本地仓库没有依赖包,那么就会去Proxy代理站点(即Nexus私服)去下载,那么如果代理站点也没有此依赖包,就会去远程中央仓库下载依赖。代理站点(私服)下载成功后再下载至用户本机仓库。
其实Maven这个自带的默认仓库一般情况下已经够大多数项目使用了。特殊情况时在配置新的仓库,比如增加JBoss仓库等(配置指定url即可)。
如下,描述了用户电脑、私服、远程中央仓库的关系图:
仓库的类型
hosted 类型的仓库,内部项目的发布仓库
releases 内部的模块中release模块的发布仓库
snapshots 发布内部的SNAPSHOT模块的仓库
3rd party 第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去
proxy 类型的仓库,从远程中央仓库中寻找数据的仓库
group 类型的仓库,组仓库用来为了方便我们开发人员而进行设置的仓库
Maven项目索引
下载Maven项目索引,项目索引是为了使用者能够在私服站点查找依赖使用的功能。
保存后后台会运行一个任务,点击菜单栏的Scheduled Tasks(再左侧菜单Administration组中)选项即可看到有个任务在RUNNING。 下载完成后,Maven索引就可以使用了,在搜索栏输入要搜索的项,就可以查到相关的信息。例如 spring-core,下图是一个示范(就可以检索出它的相关信息,包括怎么配置依赖信息):
配置使用私服
我们要想使用这个私服仓库,先在项目pom中配置相关私服信息指定仓库,如下片段需要配置到maven项目的 pom.xml 中。
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://192.168.x.x:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
- 如下片段是设定插件仓库:
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://192.168.x.x:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
- 这样配置完成后,项目才会在私服下载组件。
因为我们这个配置是配置在具体项目的 pom.xml 中的,所以只会对一个项目有效。如果我们想对自己电脑上的所有 maven 项目都启用这个私服配置,那么就需要将私服信息配置到 maven 的全局配置文件 settings.xml 中,其位置位于 apache-maven/conf/settings.xml
修改 settings.xml 中的profiles内容为:
<profiles>
<profile>
<id>nexus-central</id>
<repositories>
<repository>
<id>nexus-central</id>
<name>nexus-central</name>
<url>http://192.168.1.117:8081/nexus/content/groups/public/</url>
<layout>default</layout>
<snapshotPolicy>always</snapshotPolicy>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
- 并且激活这个 profile
<activeProfiles>
<activeProfile>nexus-central</activeProfile>
</activeProfiles>
- 之后所有本机的Maven项目就都会在这个私服下载组件(这样比较方便)
项目发布到私服
再 maven 工程的 pom.xml 中添加如下配置:
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.x.x:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.x.x:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
- j仅仅这样配置还不够,发布项目到私服肯定会失败,因为我们还没有配置权限,没有配置权限发布项目应该会出现401错误码,所以我们需要在 maven 的 settings.xml 中配置私服权限账号信息,如下:
<!-- servers节点的属性是在向仓库发布时使用 -->
<servers>
<server>
<!-- 这个ID要和项目pom.xml中distributionManagement下的ID一致 -->
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<!-- 这个ID要和项目pom.xml中distributionManagement下的ID一致 -->
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
注意图中的Respository中的id一定要和server下的id一致,切记!!否则出现权限问题。
然后运行命令发布
mvn clean deploy
在控制台提示发布成功后,进入到私服上的仓库中,看一下确实存在刚刚发布的项目。
宿主库 — 3rd party
假如我们下载了oracle的驱动程序jar包想给其他项目组使用,就需要上传该jar包。选中宿主库 3rd party,之后选择Artifact Upload上传至宿主空间。
上传后到 Browse Index 中查看结果。