一、nexus的好处
Maven默认提供的中央仓库是在远程网络服务Appache提供的,这对于我们开发时不合理的。如果我们没网了或者什么情况,我们怎么办?我们需要的jar包中央库没有或者是要收费怎么办?也就是说我们队中央仓库的依赖性太大。而Nexus私服则可以解决我们这个问题。
这样就相当于在我们本地的局域网搭建了一个类似中央仓库的服务器,我们开始将中央仓库的一些资料下载到私服务器上,然后平时我们的maven项目就是直接访问局域网内的私服即可,既节省了网络带宽也会加速项目搭建的进程,这样对我们开发来说,对公司来说都是非常好的选择。项目内部和项目与项目之间也可以共享jar包,达到代码的最大化利用。
一般有两种情况需要我们上传jar包至nexus,一个是本地项目生成的jar包,另一个是我们从第三方拿过来的的中央库中不存在的jar包,前者采用maven工程deploy的方法,后者采用手动上传的方式。
二、手动上传jar包
对于一些第三方jar包,在maven中央库中下载不到的,我们可以手动上传至nexus库中。
首先登陆nexus,进入3rd party,选择Artifact Upload,如图:
nexus提供了两种上传jar到私服的方式From POM和GAV Parameters。
From POM方式使用场景:上传的jar还依赖别的jar时,如何把jar和他的依赖一起传到私服。例如:我们想传a.jar到私服,但是a.jar还依赖b.jar,假如只传a.jar到私服,在项目中会因为找不到a.jar的依赖(b.jar)而报错。
使用参考链接:https://blog.csdn.net/wabiaozia/article/details/76098727
本项目还未使用到From POM的方式,所以只介绍GAV Parameters方式。
示例中使用的jar包为:geogson.jar包,基本信息:
<dependency>
<groupId>com.nsn.geogson</groupId>
<artifactId>geogson</artifactId>
<version>1.0.0</version>
</dependency>
导入成功后,search该包显示如下:
在本地工程中加入本项目依赖,会自动下载jar包至本地maven仓库文件夹中。
三、deploy jar至nexus库
工程pom文件中,配置发布构件的基本信息:
maven中的仓库分为两种,snapshot快照仓库和release发布仓库。snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。定义一个组件/模块为快照版本,只需要在pom文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写),如下:
<groupId>cc.mzone</groupId>
<artifactId>m1</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>
maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。
配置deploy的地址:
<!-- 设置deploy的地址 -->
<distributionManagement>
<repository>
<id>release</id> <!--库的ID-->
<name>user release resp</name> <!--库的名字-->
<url>http://192.168.1.11:9083/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>user snapshot</name>
<url>http://192.168.1.11:9083/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
distributionManagement配置参考: https://blog.csdn.net/yeguxin/article/details/77110622
<distributionManagement> 中的 <repository> && <snapshotsrepository>各自的含义
- maven仓库分为两种 release发布仓库(<repository>) 和 snapshot快照仓库(<snapshotsrepository>)
- snapshot快照仓库用于保存开发过程中的不稳定版本
- release正式仓库用来保存稳定的发行版本
- 定义一个组件/模块为快照版本 只需要在pom文件中的该模板的版本号后面加上 -SNAPSHOT就可以了. 注意:必须是大写
- maven会根据模块的版本号(pom文件中的<version>版本号</version>)中是否带有-SNAPSHOT来判断这个是快照版本还是正式版本.
- 如果是快照版本:
- 在mvn deploy时会自动发布到快照版本库中.
- 而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本
-
如果是正式发布版本:
- 那么在mvn deploy时会自动发布到正式版本库中,
- 而使用正式版本的模块,在不更改版本号的情况下,编译打包时,如果本地已经存在该版本的模块则使用本地的而不是主动去镜像服务器上下载
本地maven文件夹conf目录下,setting.xml文件中配置nexus的账号和密码:
<?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">
<!--设置自己的maven本地仓库-->
<localRepository>D:\maven\repo</localRepository>
<pluginGroups/>
<proxies/>
<servers>
<server>
<id>central</id> <!--这个ID要与下面的repository中的ID一致-->
<username>dev</username> <!--nexus中配置的用户名密码-->
<password>dev123</password>
</server>
<server>
<id>snapshots</id>
<username>dev</username>
<password>dev123</password>
</server>
<server>
<id>releases</id>
<username>dev</username>
<password>dev123</password>
</server>
</servers>
<mirrors><!--从nexus下载依赖地址-->
<mirror>
<id>nexus-public</id>
<mirrorOf>central</mirrorOf>
<name>central repository</name>
<url>http://192.168.1.11:9083/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id> <!--正式仓库id-->
<!--name随便-->
<name>Nexus Release Snapshot Repository</name>
<!--地址是nexus中repository(Releases/Snapshots)中对应的地址-->
<url>http://192.168.1.11:9083/nexus/content/repositories/releases</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<url>http://192.168.1.11:9083/nexus/content/repositories/snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories> <!--插件仓库地址,各节点的含义和上面是一样的-->
<pluginRepository>
<id>central</id>
<name>Nexus Release Snapshot Repository</name>
<url>http://192.168.1.11:9083/nexus/content/repositories/releases</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>snapshots</id>
<url>http://192.168.1.11:9083/nexus/content/repositories/snapshots</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!--激活配置-->
<activeProfiles>
<activeProfile>nexus</activeProfile> <!--profile下的id-->
</activeProfiles>
</settings>
需要注意的是,settings.xml中server元素下id的值必须与POM中repository或snapshotRepository下id的值完全一致。maven在处理发布时会根据id查找用户名称和密码进行登录和文件的上传发布。
最后点击deploy即可发布。