Java Maven:(十一)搭建 Maven 私服-6050字匠心出品(全干货-阅读时间可能较长)

    技术2025-04-16  10

    搭建 Maven 私服

    1.什么是私服1.节省资金、外网带宽2.加速 Maven 构建3.部署第三方构件4.提高稳定性,增强控制5.降低中央仓库的负荷 2.使用 Nexus 搭建私服1.Nexus 资源包下载2.Nexus 资源包解压3.检查私服端口和工作目录4.修改 Nexus 运行用户5.启动并测试访问6.登录私服7.查看仓库8.仓库类型简述9.代理仓库配置 3.Nexus 用户管理1.Nexus 中的缺省用户及角色说明1.admin 用户(管理员)2.deployment(部署用户)3.anonymous(匿名用户) 2.用户操作1.修改用户密码2.新建用户3.删除用户 4.私服应用1.修改 settings.xml 配置文件2.在 POM 文件中配置私服3.发布第三方构件到私服

    1.什么是私服

    私服是一种特殊的远程仓库,它是架设在局域网的仓库服务,私服代理广域网上的远程仓库,供局域网使用。 在企业开发中,私服的建设是有必要的,其好处如下:

    1.节省资金、外网带宽

    利用私服代理外部仓库之后,对外的重复构件下载便得以简化,降低外网带宽压力

    2.加速 Maven 构建

    不停地连接请求外部仓库是相当耗时的,但是 maven 的一些内部机制(如快照更新检查)要求 Maven 在执行构建的时候不停地检查远程仓库数据。因此,当项目配置了很多外部远程仓库的时候,构建速度会降低。使用私服解决这问题,因为 Maven 只需要检 查局域网内私服的数据时,构建速度便有明显提高。

    3.部署第三方构件

    当某个构件无法从任何一个远程仓库获取怎么办?比如 Oracle 的 JDBC 驱动由于版权原因不能发布到公共仓库中。建立私服后,便可以将这些构件部署到这个内部仓库中,供内部 Maven 项目使用

    4.提高稳定性,增强控制

    对于远程仓库来说,当外网不可用时,Maven 构建有可能因为依赖没有下载而不可行,搭建并应用私服后,即使没有外网,如果该构件之前被其它人下载过就会存在私服上,此时再次依赖该构件就可以不用连接外网直接就可以从私服上下载到。同时私服软件(nexus) 还提供了额外的管理功能。

    5.降低中央仓库的负荷

    中央仓库是有限的。如果所有的 Maven 工程开发过程中,都通过中央仓库实现构件的依赖和管理,那么中央仓库的负荷过高,也会严重影响工程构建的效率。如果使用私服,可以分散中央仓库的负荷,只有在私服中没有需要依赖的构件时才会去连接中央仓库

    2.使用 Nexus 搭建私服

    搭建环境:CentOS8、JDK1.8、Sonatype Nexus2.11.2

    1.Nexus 资源包下载

    Nexus 官方下载地址这次用的是nexus-2.11.2-03

    2.Nexus 资源包解压

    在/usr/local 目录中创建子目录 nexus:mkdir /usr/local/nexus解压 Nexus 到指定目录:tar -zxvf nexus-2.11.2-03-bundle.tar.gz -C /usr/local/nexusNexus 压缩包中包含两个子目录: nexus-2.11.2-03 和 sonatype-worknexus-2.11.2-03 是具体的私服应用内容sonatype-work 是 Nexus 私服下载的构件存放工作目录

    3.检查私服端口和工作目录

    在 nexus-2.11.2-03 目录中有子目录 conf,其中保存私服应用的配置信息。查看 nexus.properties 文件,确定私服访问端口和工作目录。此操作可不做任何内容修改。配置文件内容如下: # Jetty section,Nexus 私服应用是使用 Jetty 提供 web 服务的,下述内容为 Jetty 配置。 application-port=8081 # 私服访问端口 application-host=0.0.0.0 nexus-webapp=${bundleBasedir}/nexus # Nexus 私服 WEB 应用所在位置 nexus-webapp-context-path=/nexus # Nexus 私服 WEB 应用 contextPath # Nexus section Nexus 私服配置信息 nexus-work=${bundleBasedir}/../sonatype-work/nexus # 私服工作目录,即构件保存目录 runtime=${bundleBasedir}/nexus/WEB-INF # 私服 WEB 应用运行目录

    4.修改 Nexus 运行用户

    Nexus 私服在启动后,私服应用需要访问 Linux 的文件系统,所以需要有足够的权限。Nexus 的启动脚本文件中,可以指定私服应用的访问用户,此信息在nexus-2.11.2-03/bin/nexus 脚本文件中定义。需要修改的信息如下: # NOTE - This will set the user which is used to run the Wrapper as well as # the JVM and is not useful in situations where a privileged resource or # port needs to be allocated prior to the user being changed. #RUN_AS_USER= #原内容 RUN_AS_USER=root #修改后的内容,代表 Nexus 私服使用 root 用户权限。

    5.启动并测试访问

    启动 Nexus 私服:

    /usr/local/nexus/nexus-2.11.2-03/bin/nexus start成功启动后,控制台输出内容如下: **************************************** WARNING - NOT RECOMMENDED TO RUN AS ROOT **************************************** Starting Nexus OSS... Started Nexus OSS.

    可通过命令检查私服运行状态:

    /usr/local/nexus/nexus-2.11.2-03/bin/nexus status内容如下为私服运行中: **************************************** WARNING - NOT RECOMMENDED TO RUN AS ROOT **************************************** Nexus OSS is running (8239).

    内容如下为私服未运行:

    **************************************** WARNING - NOT RECOMMENDED TO RUN AS ROOT **************************************** Nexus OSS is not running.

    也可使用浏览器访问 Nexus 私服 WEB 应用, 访问地址为: http://ip:8081/nexus (ip 为 Nexus 所在系统的访问 IP)

    6.登录私服

    Nexus 默认提供管理用户,用户名为 admin,密码为 admin123

    7.查看仓库

    8.仓库类型简述

    group 仓库组:Nexus 通过仓库组来统一管理多个仓库,这样访问仓库组就相当于访问仓库组管理的多个仓库hosted 宿主仓库:主要用于发布内部项目构件或第三方的项目构件(如购买商业的构件)以及无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)。releases 发布内部的 releases 模块的仓库,所有非快照版本工程都发布到此仓库中snapshots 发布内部的快照模块的仓库,所有工程版本以 SNAPSHOT 结尾的都发布到此仓库中。party 第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去proxy 代理仓库:代理公共的远程仓库。virtual 虚拟仓库:用于适配 Maven 1

    9.代理仓库配置

    为 Nexus 配置阿里云代理仓库。Nexus 默认远程仓库为 https://repo1.maven.org/maven2/ 设置阿里云代理仓库http://maven.aliyun.com/nexus/content/groups/public/ Repository ID: aliyunRepository Name: Aliyun RepositoryRemote Storage Location: http://maven.aliyun.com/nexus/content/groups/public/ 把 aliyun 添加到仓库组中,并把 aliyun 排在 central 之上。

    3.Nexus 用户管理

    1.Nexus 中的缺省用户及角色说明

    在 Nexus 中内置了三个缺省用户,每个用户都拥有不同的角色,不同的角色对应不同的权限。在 Nexus 中用户必须要拥有角色

    1.admin 用户(管理员)

    admin 管理员用户拥有最大权限,可以对 Nexus 进行全向控制。

    2.deployment(部署用户)

    deployment 用户为部署用户,该用户拥有对 nexus 的部分的操作,但是该用户具有对所有仓库的操作权限。

    3.anonymous(匿名用户)

    anonymous 用户为匿名用户,只具备了对 nexus 操作的部分权限,对于仓库也只是拥有读和查看权限。

    2.用户操作

    1.修改用户密码

    点击 Change Password 修改用户密码。 输入当前密码以及新密码。

    2.新建用户

    点击创建 Nexus Users 创建一个 Nexus 用户。 输入用户信息并给用户分配角色。 点击 Savea 按钮完成用户的创建。 在用户列表中可以查看到新创建用户。

    3.删除用户

    选中需要删除的用户,点击删除按钮即可删除该用户。

    4.私服应用

    要在 Maven 工程中使用私服,需要提供私服配置信息

    1.修改 settings.xml 配置文件

    在 servers 节点中添加仓库的用户认证:

    在< server>节点中配置仓库认证,操作仓库的用户以及密码,可以使用 deployment 用户,该用户为 Nexus 的缺省用户,也可以自己创建用户 <server> <id>releases</id> <username>deployment</username> <password>deployment123</password> </server> <server> <id>snapshots</id> <username>deployment</username> <password>deployment123</password> </server>

    在 profile 节点中添加配置信息:

    <profile> <id>dqcgm</id> <activation> <activeByDeffault>false</activeByDeffault> <jdk>1.8</jdk> </activation> <!-- 公共仓库配置 --> <repositories> <repository> <!-- 仓库 id --> <id>public</id> <!-- 私服地址 --> <url>http://192.168.0.110:8081/nexus/content/groups/public/</url> <!-- 仓库是否支持 releases 版本 --> <releases> <enabled>true</enabled> </releases> <!-- 仓库是否支持 snapshost 版本 --> <snapshost> <enabled>true</enabled> </snapshost> </repository> </repositories> <!-- 插件仓库配置 --> <pluginRepositories> <pluginRepository> <id>public</id> <url>http://192.168.0.110:8081/nexus/content/groups/public/</url> <!-- 插件仓库是否支持 releases 版本 --> <releases> <enabled>true</enabled> </releases> <!-- 插件仓库是否支持 snapshost 版本 --> <snapshost> <enabled>true</enabled> </snapshost> </pluginRepository> </pluginRepositories> </profile>

    配置 activeProfiles 激活 profile:

    <activeProfiles> <!--根据 profile 的 id 标签值激活指定的内容--> <activeProfile>dqcgm</activeProfile> </activeProfiles>

    删除阿里镜像仓库的配置:

    我们在私服中已经配置了对于连接阿里镜像的代理,所以在 setings.xml 中需要将该配置去掉,否则会自动去阿里镜像下载插件。

    2.在 POM 文件中配置私服

    添加上传构件的仓库地址:

    <distributionManagement> <repository> <!--需要与 settings.xml 中 server 的 id 相同--> <id>releases</id> <name>Nexus Release Repository</name> <url>http://192.168.0.110:8081/nexus/content/repositories/relea ses/</url> </repository> <snapshotRepository> <!--需要与 settings.xml 中 server 的 id 相同--> <id>snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://192.168.0.110:8081/nexus/content/repositories/snaps hots/</url> </snapshotRepository> </distributionManagement>

    配置插件上传项目的源码包:

    <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.2</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build>

    3.发布第三方构件到私服

    将第三方构建上传到 3rd party 仓库中: 在项目中引入第三方构件依赖:

    <dependency> <groupId>com.oracle</groupId> <artifactId>oracle-jdbc</artifactId> <version>6.0</version> </dependency>
    Processed: 0.011, SQL: 9