1. 下载nexus
下载Nexus-Bundle:
https://www.sonatype.com/download-oss-sonatype
或者使用如下地址下载最新版本:
http://www.sonatype.org/downloads/nexus-latest-bundle.zip
进入bin\jsw目录,选择windows-x86-64
以管理员身份安装服务,启动服务后,就可以在页面中访问:
http://localhost:8081/nexus
点击右上角的log In,用户名和密码为:admin/admin123
2. 仓库类型介绍
登陆Nexus,在左边菜单栏里选择Repositories,然后会出现右边的画面,右边上半部分是列出来的repository,黑体字(public repositories)是类型为group的repository。
这里简单介绍下几种repository的类型:
Ø hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
Ø proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
Ø group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。
将现有的仓库,Apache snapshots ,3dpart,central 等仓库 加入 public 组中,直接在在界面中 将右侧的仓库移左边,效果如下:
3. 本地仓库
我们前面讲到类型为hosted的为本地仓库,Nexus预置了3个本地仓库,分别是Releases, Snapshots, 3rd Party. 分别讲一下这三个预置的仓库都是做什么用的:
Releases:
这里存放我们自己项目中发布的构建, 通常是Release版本的, 比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war, 我们就可以把这个构建发布到Nexus的Releases本地仓库. 关于符合发布后面会有介绍.
Snapshots:
这个仓库非常的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本.
3rd Party:
顾名思义, 第三方库, 你可能会问不是有中央仓库来管理第三方库嘛,没错, 这里的是指可以让你添加自己的第三方库, 比如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到Oracle 的JDBC驱动, 这个时候我们就需要自己添加到3rdparty仓库。
4. 在项目中上传jar包到maven仓库
本例将使用deployment用户,将自己的jar包上传到release仓库。
1) 在nexus配置release仓库
将releases的deployment policy设置为allow
2) 在nexus配置用户:deployment
deployment为默认的用户之一,我们也可以创建新用户来操作,操作步骤一样。
在Security下面的Users中,修改deployment帐号的密码,方法是在帐号上右键,然后选择“Set Password”,时时状态需要为Active(默认)。密码设置为:123456
从上图可以看到deployment的config下的role management只有两行,权限非常少,网上都没说权限的事,导致在上传jar包的时候老报401没有权限。在这里点击右边的add按钮,添加一些权限,由于不太熟悉nexus的权限机制,因此全选添加进来。
3) 在settings.xml文件中配置用户
添加如下内容:
Id可随便写,但后面在pom.xml中或者命令行中需要用到。
Username为前面准备好的用户名,本例使用deployment用户
Password为相应密码
4) 配置pom.xml
在项目的pom.xml中添加如下内容:
<distributionManagement>
<repository>
<id>garydeploymentid>
<name>public repositoryname>
<url>http://192.168.110.188:8081/nexus/content/repositories/releases/url>
repository>
distributionManagement>
其中id为上面settings.xml中配置的id,name为描述,可随意写。
Url为上传到maven仓库中的位置。
注:因为这里我们上传选择的是release仓库,因此修改项目的版本号,原始内容如下:
<groupId>com.examplegroupId>
<artifactId>apartment-rabbitmqartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
将版本号改为0.0.1
5) 配置maven命令
添加一个build,选择当前工程,输入:clean deploy
运行之,(也可以cmd到工程目录,使用命令mvn clean deploy)
上传成功。
在nexus中查看:
注:
前面是使用的springboot默认的打包方式,打出来的包在target目录下有两个文件:
XXX.jar (11M)
Xxx.original (8K)
在后面使用此maven中的包时找不到包中的类。因此需要改为maven的打包方式如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<configuration>
<skip>trueskip>
configuration>
plugin>
plugins>
build>
因为此项目是父子结构,因此需要把这个放到父pom.xml中,本项目中的pom.xml中plugins可以删除了。这样打出来的只有一个jar文件,大小为8K。
5. 使用命令上传jar包到maven仓库
还是上面的项目,编译完后找到jar包,使用命令上传:
mvn deploy:deploy-file -DgroupId=com.example2 -DartifactId=apartment-rabbitmq -Dversion=0.0.1 -Dpackaging=jar -Dfile=D:\apartment-parent\apartment-rabbitmq\target\apartment-rabbitmq-0.0.1.jar -DrepositoryId=gaydeployment -Durl=http://192.168.110.188:8081/nexus/content/repositories/releases
其中:groupId和artifactId可以和项目中的不一样,但使用的时候需要对应上,所以建议还是一样的好,本例中故意加了个2.
RepositoryId很重要,即前面settings.xml中配置的id,不写会报401没权限。
6. 在nexus页面中上传jar包
在releases仓库,选择artifact upload页签,3处选GAV Parameters,4处选本地jar包,5处填写jar版本等信息,6添加,7上传。
7. 项目中使用私服中的jar包
1. 在settings.xml中配置servers认证,前面已配置了。
2. 在项目的pom.xml中配置本项目将使用的私服:
<repositories>
<repository>
<id>repo-innerid>
<url>http://192.168.110.188:8881/nexus/content/groups/public/url>
<snapshots>
<enabled>trueenabled>
snapshots>
<releases>
<enabled>trueenabled>
releases>
repository>
repositories>
3. 在settings.xml中配置私服地址: