Maven私服搭建_基于Nexus

发布时间 2023-10-07 19:50:53作者: ashet

在微服务系统中,服务被拆分成若干个项目,而这些子项目都有一个共同的父项目,以使用公共依赖,搭建子项目只需继承父项目的依赖即可。而这些公共依赖需要上传到一个在线Maven私服,子项目在构建时就能成功引入公共依赖。Maven私服的还具有节省带宽,加快Maven构建速度等优点。

其实我们个人下载的Maven软件,其中的settings.xml文件就被很多人替换过,因此使用的远程仓库并非Apache的,而是Alibaba提供的远程仓库,因此我们搭建Maven私服也算是一种俄罗斯套娃?

下载sonatype nexus repository manager

https://help.sonatype.com/repomanager3/product-information/download // 选择Unix archive,如果你准备安装在Linux服务器上。

利用Xftp将压缩包上传至Linux指定路径。解压,得到两个文件夹nexus和sonatype-work

先在/sonatype-work/nexus3路径下找到admin.password文件,这是登录的默认密码

然后在/nexus/bin路径下./nexus启动Nexus,启动成功后,浏览器访问

http://<服务器ip>:8081

admin + 默认密码登录,第一次登录就会让你修改密码,修改后的密码最好还是在/sonatype-work/nexus3路径下保存备份,后面settings.xml文件会用到

  • 创建一个私服仓库,选择“Maven2 (hosted)”作为仓库类型。填写仓库名称和其他相关信息,然后保存。
  • 创建一个代理仓库,以便从中央Maven仓库等远程仓库代理下载依赖项。选择“Maven2 (proxy)”作为仓库类型,并填写相关信息(将remote repository配置为阿里镜像仓库)。保存代理配置。

至此,Maven私服搭建成功!构建Maven时,会先从私服仓库寻找依赖,未果,由代理仓库根据remote repository地址寻找依赖。

 

现在到你的Maven安装路径比如C:\dev\apache-maven-3.9.3\conf找到settings.xml文件,复制一份,修改其内容:1、将阿里镜像替换成你的私服镜像。2、配置私服账号密码权限。

    <!-- 配置私服镜像仓库 -->
	<mirror>
		<id>ashe</id>
		<mirrorOf>maven-central</mirrorOf>
		<url>http://服务器ip:8081/repository/private-maven/</url>
	</mirror>

    <!-- 配置连接权限 -->
	<server>
        <id>ashe</id>
        <username>admin</username>
        <password>修改后的密码</password>
    </server>

 

现在我们可以使用这份new-settings.xml文件来构建微服务的父项目了。新建一个project,删除所有文件仅保留pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.ashe</groupId>
    <artifactId>base</artifactId>
    <!-- 不允许上传SNAPSHOT快照版本 -->
    <version>1.0.0</version>

    <name>spring-cloud</name>
    <description>For Study SpringCloud Alibaba</description>
    <!-- Maven打包为pom而非jar -->
    <packaging>pom</packaging>

    <properties>
        <!-- java -->
        <java.version>17</java.version>

        <!-- Spring Cloud Alibaba -->
        <spring.cloud.alibaba.version>2022.0.0.0-RC2</spring.cloud.alibaba.version>

        <!-- Spring Cloud -->
        <spring.cloud.version>2022.0.0</spring.cloud.version>

        <!-- Spring Boot -->
        <spring-boot.version>3.0.2</spring-boot.version>

    </properties>

    <!-- dependencyManagement管理依赖后,子模块的pom.xml若想要集成父工程的依赖,必须显式地申明 -->
    <dependencyManagement>
        <dependencies>

            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Spring Cloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Spring Cloud Alibaba -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </build>
    <distributionManagement>
        <!-- mvn deploy 上传到指定仓库(Maven私服) -->
        <repository>
            <!-- 这里的id要与你settings.xml文件中保持一致 -->
            <id>ashe</id>
            <url>http://服务器ip:8081/repository/private-maven/</url>
        </repository>
    </distributionManagement>

</project>

mvn clean  mvn deploy

可以看到公共依赖已经上传到Maven私服了。

这时再创建子工程,在pom.xml中继承父工程的公共依赖即可,构建成功,运行成功。