CentOS安装nexus搭建maven私服(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xxkalychen/article/details/82561238

架设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时的权限验证。

扫描二维码关注公众号,回复: 3109087 查看本文章

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());
    }

}

运行结果:

猜你喜欢

转载自blog.csdn.net/xxkalychen/article/details/82561238