maven私服(nexus)搭建

一、为何要搭建maven私服

1.有的公司开发电脑没法直接连外网,下载不了依赖;可以通过私服(私服服务器可以连接),开发电脑连接私服服务器下载依赖。
2.项目协作。某个项目包含多个模块,开发人员A将模块打包提交到私服,其他人从私服获取该模块的依赖。

二、使用私服与不使用的区别

1.不使用私服


2.使用私服.

三、下载和安装nexus

1.从https://www.sonatype.com/download-sonatype-trial选择给定系统下载。
2.将下载的压缩包解压,得到2个目录。如图:

3.【非必须】修改端口(默认端口是8081,根据需要修改)
打开nexus-2.5.1-bundle\nexus-2.5.1-01\conf\nexus.properties文件,修改端口

4.安装nexus服务
进入到\nexus-2.5.1-bundle\nexus-2.5.1-01\bin\jsw\windows-x86-64(根据自己的系统选择)目录,执行install-nexus.bat来安装服务。
安装后,在服务中科院看到nexus服务

5.【非必须】如果有中央仓库的索引文件,可以丢到下面的目录(先清空原有内容)
索引文件位置:\nexus-2.5.1-bundle\sonatype-work\nexus\indexer\central-ctx,有了索引文件后,在nexus服务启动后,可以根据artifact id查找依赖。

6.启动nexus服务
进入到\nexus-2.5.1-bundle\nexus-2.5.1-01\bin\jsw\windows-x86-64(根据自己系统选择),双击start-nexus.bat,直到窗口消失即启动成功。

7.浏览器输入http://localhost:8081/nexus即进入nexus的管理页面。点击右上角的“Log In”,输入用户名:admin,密码:admin123登录。

8.登录后,可以看到有如下的Repository

其中Central是中央仓库,Releases是自己开发的项目的发布仓库(release版本),Snapshots是快照版本仓库(一般开发环境开发项目的版本,
比如我们新建的maven项目默认是0.0.1.SNAPSHOT),如果将它发布到仓库中,即是发布在Snapshots仓库。3rd parth是第三方的仓库。
Public Repositories是我们下载依赖需要使用的仓库,在它的Configuration可以看到它包含了其他所有的仓库。

四、使用maven连接nexus私服
1.指定本地仓库的位置
打开%MAVEN_HOME%/conf/settings.xml文件,找到,修改本地仓库路径,默认是${user.home}/.m2/repository(在C盘,如果C盘空间紧张,可以指定其他位置)
1.打开%MAVEN_HOME%/conf/settings.xml文件,找到增加一个mirror。

1
2
3
4
5
6
<mirror>
  <id>Nexus</id>
  <mirrorOf>*</mirrorOf>
  <name>Team Nexus Repository</name>
  <url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>

这里配置的url就是Public Repository的地址。因为它包含了其他的仓库。

3.配置阿里云的仓库(可以在nexus新增一个阿里云的repository)
由于网络问题,可能有些依赖无法下载,或者下载速度很慢。我们可以使用阿里云的仓库来解决这个问题。我们在%MAVEN_HOME%/conf/settings.xml中增加一个阿里云的mirror,如下:

1
2
3
4
5
6
<mirror>
   <id>Aliyun-Nexus</id>
   <mirrorOf>central</mirrorOf>
   <name>Aliyun Nexus Repository</name>
   <url>http://maven.aliyun.com/nexus/content/groups/public</url>
 </mirror>

注意:这里配置为central,不要配置为*。如果有网络,可以按照上面的配置,每个人在自己的maven的settings.xml中增加上面的镜像即可。
如果没有网络,可以在nexus中新增一个repository,repository type为:proxy。Url=http://maven.aliyun.com/nexus/content/groups/public/。
2.IDE配置maven的路径和user settings file

然后,在Public Repositories中,将阿里云的仓库移到central的前面,这样就会先从阿里云的仓库下载依赖,而不是maven中央仓库。

不过,配置之后发现没法使用。

访问阿里云的仓库url,提示

然后访问https://maven.aliyun.com,里面有最新的仓库地址:

不过,配置了仍然没有成功。不过配置到maven的settings.xml的中是OK的。

4.新建一个测试项目mytest,它依赖了spring-jdbc,版本为5.1.3.RELEASE。我们在pom.xml增加此依赖保存后,可以看到是通过阿里云仓库下载的。

五、将项目上传到nexus

现在,假定需要将项目发布到nexus私服,该怎么做呢?

1.打开项目的pom.xml,增加下面的配置

1
2
3
4
5
6
7
8
9
10
<distributionManagement> 
  <repository> 
    <id>releases</id>  
    <url>http://localhost:8081/nexus/content/repositories/releases</url> 
  </repository>  
  <snapshotRepository> 
    <id>snapshots</id>  
    <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
  </snapshotRepository> 
</distributionManagement>

配置的内容在nexus的releases和snapshots的Summary中可以看到

2.配置%MAVEN_HOME%/conf/settings.xml,找到<servers>标签,增加nexus私服用户名和密码的配置。

1
2
3
4
5
6
7
8
9
10
<server>
  <id>releases</id>
  <username>admin</username>
  <password>admin123</password>
</server>
<server>
 <id>snapshots</id>
 <username>admin</username>
 <password>admin123</password>
</server>

注意:这里的id必须与<distributionManagement>中的repostory id一致。

3.在项目执行mvn:deploy命令即可。Eclipse:项目右键run as Maven Build,然后goal输入deploy,确定即可。

我们可以看到,项目被上传到了snapshots中,因为我们的项目版本为0.0.1.SNAPSHOTS,所以上传到了snapshots。然后我们在nexus的Snapshots仓库的Brown Index可以看到刚刚发布的包

我们将项目的版本号改为0.0.1,重新执行deploy,会发现发布到了nexus的releases仓库。

六、问题记录

1.启动nexus失败,提示“The nexus service was launched, but failed to start.”
我们可以在\nexus-2.5.1-bundle\nexus-2.5.1-01\logs\wrapper.log查看具体的错误信息。

我这里的问题是:我电脑安装了jdk7和jdk8,环境变量配置的是jdk8.我的nexus版本是2.5.1,它应该使用jdk7.

找到\nexus-2.5.1-bundle\nexus-2.5.1-01\bin\jsw\conf\wrapper.conf,打开文件并搜索“wrapper.java.command=”,然后将wrapper.java.command设置为jdk7的执行路径。

Donny wechat
欢迎关注我的个人公众号
打赏,是超越赞的一种表达。
Show comments from Gitment