架设maven私服的一个重要目的,就是在团队协作开发的时候,底层开发人员可以将模块部署到服务器,上层的开发人员可以直接使用依赖,而且迭代升级也很方便,否则就需要把.m2中的库一个个发送,这事儿笔者做过,虽然模块不多,可是感觉到这明显不是处理事情的办法。
好了,因为我们的nexus已经搭建完毕,我们要给nexus创建一个新的用户,并且添加nx-admin权限。笔者建议,最好添加一个,虽然默认的admin用户拥有所有权限,什么都能调试,但是这是唯一一个超级用户,一旦权限降低就没有人管得了系统了。笔者就做过,到centos服务器里面找了个遍,也没找到用户信息和权限设置在哪儿,不得已重新架设了一遍。
接下来我们修改maven的settings.xml 文件。
在这里插几句,由于maven默认将.m2库放在了系统盘,我特意做了规划,把开发用到的库放到另外的分区里面。我想当然地以为,在Idea里面把地址改动就好了。结果跟预想的不一样,混乱了好一阵。大致把思路理一下。
.m2库的位置是由maven的settings.xml文件决定的,找到你所使用(意思是假如你安装了多个maven的版本)的maven文件夹下面的conf文件夹,打开settings.xml文件,在开头部分就是修改库位置,照这个样子修改为新的位置。
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository -->
<localRepository>F:\libraries\maven\.m2\repository</localRepository>
保存以后,可以测试一下。吗用户文件夹下面的.m2删除掉,新建或者在一个现成的项目里面,添加一个新的maven依赖库,刷新导入,看看再用户文件夹下面会不会自动建立.m2文件夹,如果没有,那就是改好了。
然后在做其他修改,修改还是在maven安装文件夹下面的conf/settings.xml文件,别以为在Idea里面改动设置的Override会起作用,只要maven安装文件夹conf下面有settings.xml,它就会首先被使用。因为我改动了.m2的位置,必须要有这里这个文件。当然,如果你没有改动默认.m2的位置,然后可以把maven安装文件夹下面的conf/settings.xml文件删除掉,maven找不到,就会使用你在Idea里面设置的那一个了。
现在我们在settings.xml中一些节点里面添加一些东西。
1. 首先在<servers>节点添加如下信息。
<server>
<id>nexus-public</id>
<username>chris</username>
<password>123456</password>
</server>
<server>
<id>nexus-releases</id>
<username>chris</username>
<password>123456</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>chris</username>
<password>123456</password>
</server>
这三个节点信息对应maven在访问这三个库public组,replease和snapshots时的权限验证。
2. 在<mirrors>节点下面添加以下信息。
<mirror>
<id>nexus-public</id>
<name>Chris Home Nexus public Server</name>
<url>http://192.168.1.100:8081/repository/maven-public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
<mirror>
<id>nexus-releases</id>
<name>Chris Home Nexus releases Server</name>
<url>http://192.168.1.100:8081/repository/maven-releases/</url>
<mirrorOf>*</mirrorOf>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<name>Chris Home Nexus snapshots Server</name>
<url>http://192.168.1.100:8081/repository/maven-snapshots/</url>
<mirrorOf>*</mirrorOf>
</mirror>
对应的是三个库的url。注意那个<mirrorOf>中间是个大写O,有份教程写成了小写,不能被识别。
关于settings.xml文件的设置基本就结束了,接下来是在maven项目中对pom的配置,如果你只是使用中央仓库的依赖,你什么都不用配置,就当什么都没发生过,你添加的外部依赖,都会首先去私服寻找,如果没有,就会下载一份搭配私服,再从私服下载到本地.m2仓库。如果你需要把你的项目打包上传给其他开发人员依赖,你就需要对pom做一点设置。
3. 设置pom文件。也就是加入一个配置节点。
<!--将项目上传私服 -->
<distributionManagement>
<!--pom.xml这里<id> 和 settings.xml 配置servers.server.id 对应 -->
<!--releases和snapshots根据version的后缀来判断,不是snapshots的就全归入releases库-->
<repository>
<id>nexus-releases</id>
<url>http://192.168.1.100:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://192.168.1.100:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
4. 你在项目中创建一个工具类,可以调用的,以便测试。
package com.chris.utils.demo;
public class DemoUtils {
public static String getInfo() {
return "This is my utils.";
}
}
项目的maven信息是这样:
<groupId>com.chris</groupId>
<artifactId>nexus-utils-demo</artifactId>
<version>1.0.1</version>
<packaging>jar</packaging>
这是将来在其他项目中以来的库信息,部署完成后,把下面这个信息发送给其他开发人员,他们就可以下载依赖了。
<dependency>
<groupId>com.chris</groupId>
<artifactId>nexus-utils-demo</artifactId>
<version>1.0.1</version>
</dependency>
5. 在执行部署之前,我们要确保仓库允许部署。
把release和snapshots都设置为Allow redeploy。因为我们部署的项目只涉及这两个库。
执行部署命令:
mvn deploy -e
-e:打印异常信息
执行过程中,会下载很多库,你回过头去central仓库看看,出现了很多的依赖库:
你如果把你先前开发的项目都Import Changes,这个仓库会很丰富。
命令执行完毕,如果没有错误信息,去看看release仓库,你的支持库就躺在那里。
好了,在另外一个maven项目中添加依赖
<dependency>
<groupId>com.chris</groupId>
<artifactId>nexus-utils-demo</artifactId>
<version>1.0.1</version>
</dependency>
依赖下载完成之后,在测试类中调用。
package com.chris.tech;
import com.chris.utils.demo.DemoUtils;
public class MainTest {
public static void main(String[] args) {
test();
}
private static void test() {
System.out.println(DemoUtils.getInfo());
}
}
运行结果: