Maven实战-私服搭建详细教程

news2024/9/21 11:13:51

Maven实战-私服搭建详细教程

1、为什么需要私服

首先我们为什么需要搭建Maven私服,一切技术来源于解决需求,因为我们在实际开发中,当我们研发出来一个

公共组件,为了能让别的业务开发组用上,则搭建一个远程仓库很有必要,写完公用组件后,直接发布到远程仓

库,别人需要用到时,直接从远程仓库拉取即可,而你升级组件后,只需要再发布一个新版本即可。

除此之外,如果大公司中开发人员较多,大家同时去远程仓库将依赖下载到本地,那么对公司的带宽会造成很大的

压力。很有可能会造成其他的问题。所以可以在公司的局域网内部去搭建一台服务器,开发人员所有的依赖去这台

服务器中去访问,如果该台服务器中也没有该依赖,那么该服务器就去远程仓库查找,然后下载到该服务器,最后

在返给开发者。

maven仓库管理软件:

  • Apache基金会的archiva:https://archiva.apache.org

  • JFrog的Artifactory:https://jfrog.com/artifactory

  • Sonatype的Nexus:https://my.sonatype.com

推荐使用第三种,Maven私服技术,最常用的就是基于Nexus来搭建。

2、搭建Nexus私服

2.1 Nexus下载和启动

注意:nexus是java开发,所以需要保证电脑安装了java环境。

下载地址:

https://help.sonatype.com/repomanager3/product-information/download

会有三个平台的下载地址:

在这里插入图片描述

# Unix archive	
https://download.sonatype.com/nexus/3/nexus-3.61.0-02-unix.tar.gz

# Windows archive	
https://download.sonatype.com/nexus/3/nexus-3.61.0-02-win64.zip

# Mac OS archive	
https://download.sonatype.com/nexus/3/nexus-3.61.0-02-mac.tgz

这里我们下载windows平台下的3.37版本,比较稳定。

下载之后放到某一个目录之后对该软件包进行解压:

在这里插入图片描述

nexus-3.37.3-02:里面会放Nexus启动时所需要的依赖、环境配置。

sonatype-work:存放Nexus运行时的工作数据,如存储上传的jar包等。

我们可以打开 D:\DecompressionSoftwareInstall\nexus\nexus-3.37.3-02-win64\nexus-3.37.3-02\etc

目录下的 nexus-default.properties个文件,修改一些默认配置,默认端口号是8081,如果你这个端口已被使

用,就可以修改,通常不需要更改。

进入bin目录:

在这里插入图片描述

打开cmd 终端,执行启动命令:

nexus.exe /run nexus

时间会比较长,耐心等待一段时间后,如果看到如下:

在这里插入图片描述

表示启动成功,Nexus初次启动后,会在sonatype-work目录中生成一个/nexus3/admin.password文件,这里

面存放着你的初始密码,默认账号就是admin,在浏览器输入:

# 8081端口取决于自己的机器
http://localhost:8081

在这里插入图片描述

访问Nexus界面,通过初始密码登录,登录后修改密码,改完密码记得重新登录一次,否则后面的操作会没有权

限。

点击右上角登录:

在这里插入图片描述

用户名:admin(默认)

密码:第一次启动时生成,(在 /sonatype-work/nexus3/admin.password 文件中)

登录之后可以进行一些修改密码等指引操作。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

重新登录并且认证之后可以看到如下界面:

在这里插入图片描述

2.2 maven仓库

maven仓库既可以从中央仓库拉取依赖,也可以将本地依赖直接发到nexus中,那么就少不了maven中的仓库。

在这里插入图片描述

登录成功后,点击Repositories会看到一些默认仓库,每个字段含义如下:

Name: 仓库的名字
Type: 仓库的类型
Format: 仓库的格式
Status: 仓库的状态
URL: 仓库的网络地址

仓库总共分为四种类型,如下:

类型释义作用
hosted宿主仓库保存中央仓库中没有的资源,如自研组件
proxy代理仓库配置中央仓库,即镜像源,私服中没有时会去这个地址拉取
group仓库组用来对宿主、代理仓库分组,将多个仓库组合成一个对外服务
virtual虚拟仓库并非真实存在的仓库,类似于MySQL中的视图

仓库的关系如下:

在这里插入图片描述

注意的是,本地的Maven需要配置私服地址,当项目需要的依赖,在本地仓库没有,就会去到相应的宿主/远程仓

库拉取;如果宿主仓库也没有,就会根据配置的代理仓库地址,去到中央仓库拉取。

2.2.1 代理仓库

代理仓库主要是让用户通过代理仓库访问外部第三方仓库,如maven中央仓库、阿里的maven仓库。代理仓库会

从被代理的仓库(maven中央仓库、阿里的maven仓库)中下载依赖,缓存在代理仓库中以便让maven用户使

用。

创建代理仓库过程:

选择 Create repository:

在这里插入图片描述

选择 maven2(proxy):

在这里插入图片描述

输入远程仓库信息:

第一个红框:仓库名称

第二个红框:Release(表示从仓库中下载稳定的构建)

第三个红框:仓库地址(https://maven.aliyun.com/repository/public

在这里插入图片描述

然后点击创建,完成后如下:

在这里插入图片描述

2.2.2 宿主仓库

宿主仓库主要是供给自己使用:

1、将私有的一些构建通过网页的方式上传到宿主仓库中供大家使用。

2、将自己开发好的一些构建发布到nexus的宿主仓库中供大家使用

2.2.3 仓库组

仓库组既然是组的概念,说明它里面可以包含多个仓库。

因为maven用户可以从代理仓库和宿主仓库中下载构建至本地仓库,为了方便从代理仓库和宿主仓库下载构建,

maven提供了仓库组。

仓库组可以包含多个宿主仓库和代理仓库,maven用户访问一个仓库组就可以访问该仓库下的所有仓库。

仓库组中的多个仓库是有顺序的,当maven用户从仓库组中下载构建时,会按顺序在仓库组中查找组件,查到了

就返回给本地仓库,所以一般将速度快的放前面。

仓库组内部实际是没有内容的,只是起到一个请求转发的作用,将maven用户的下载请求转发给其它仓库处理。

nexus默认有仓库组maven-public:

在这里插入图片描述

打开如下:

在这里插入图片描述

在这里插入图片描述

仓库组对外url:本地maven可以通过这个url从仓库组中下载构件至本地仓库。

仓库组中成员:maven-releases(宿主的releases仓库版本)、maven-snapshots(宿主快照版本的仓库)、

maven-central(maven社区的中央仓库的代理)。

刚刚新增的maven-aliyun在左边,需要将它迁移到右边来,并且放在第三个位置,因为上述说过仓库组的查找是

有顺序的,需要将速度快的放在前面,这个新增的仓库速度比maven-central速度要快。

如下:

在这里插入图片描述

点击save保存。

3、本地Maven下载构建

先搭建一个新项目。

在这里插入图片描述

找到仓库组提供的url:

在这里插入图片描述

在这里插入图片描述

3.1 pom.xml方式

在新建项目的 pom.xml 文件中加入如下内容:

<repositories>
    <repository>
        <id>maven-nexus</id>
        <url>http://localhost:8081/repository/maven-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

<!--该配置是为了防止pom中的jar包从私服下载之后,执行mvn命令插件还是从中央仓库中下载-->
<pluginRepositories>
    <pluginRepository>
        <id>maven-nexus</id>
        <url>http://localhost:8081/repository/maven-public/</url>
    </pluginRepository>
</pluginRepositories>

因为nexus需要有用户名和密码才能访问,所以需要在 setting.xml 文件中配置账号密码:

<server>
	<id>maven-nexus</id>
	<username>admin</username>
	<password>admin</password>
</server>	

注意:setting.xml 中的 id 需要和 pom.xml 文件中配置的 id 一致,username和password是自己在nexus中配置

的。

注意事项:

1、 自己在pom.xml文件中配置了私服并且也在idea的maven中配置了settings.xml文件,但是jar包还是从阿里云

下载。原因:自己电脑上有好几个setting.xml文件,默认会找到settings.xml文件,自己当初指定的的xml文件名

称并不是settings.xml文件名。

解决方案:将其它的xml文件删掉或改名,并将自己指定的xml文件改名为settings.xml文件。

2、jar包从私服下载之后,但是执行mvn命令插件还是从中央仓库中下载。

原因:所有的pom文件都继承了super pom:

解决方案:在自己的pom文件中添加如下:

<pluginRepositories>
	<pluginRepository>
    	<id>maven-nexus</id>
        <url>http://localhost:8081/repository/maven-public/</url>
    </pluginRepository>
</pluginRepositories>

执行mvn compile:

$ mvn compile
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building maven hello world 1.0-SNAPSHOT                                 
[INFO] ------------------------------------------------------------------------
Downloading: http://localhost:8081/repository/maven-public//org/apache/maven/plugins/maven-jar-plugin/3.2.2/maven-jar-plugin-3.2.2.pom
Downloaded: http://localhost:8081/repository/maven-public//org/apache/maven/plugins/maven-jar-plugin/3.2.2/maven-jar-plugin-3.2.2.pom (0 B at 0.0 K
B/sec)
Downloading: http://localhost:8081/repository/maven-public//org/apache/maven/plugins/maven-plugins/34/maven-plugins-34.pom
......
Downloaded: http://localhost:8081/repository/maven-public//org/codehaus/plexus/plexus-compiler-manager/2.2/plexus-compiler-manager-2.2.jar (0 B at 
0.0 KB/sec)
Downloading: http://localhost:8081/repository/maven-public//log4j/log4j/1.2.12/log4j-1.2.12.jar
Downloaded: http://localhost:8081/repository/maven-public//org/codehaus/plexus/plexus-classworlds/2.2.2/plexus-classworlds-2.2.2.jar (0 B at 0.0 KB
/sec)
Downloading: http://localhost:8081/repository/maven-public//commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.jar
Downloaded: http://localhost:8081/repository/maven-public//org/codehaus/plexus/plexus-container-default/1.5.5/plexus-container-default-1.5.5.jar (0
 B at 0.0 KB/sec)
Downloading: http://localhost:8081/repository/maven-public//com/google/collections/google-collections/1.0/google-collections-1.0.jar
Downloaded: http://localhost:8081/repository/maven-public//org/codehaus/plexus/plexus-compiler-javac/2.2/plexus-compiler-javac-2.2.jar (0 B at 0.0 
KB/sec)
Downloaded: http://localhost:8081/repository/maven-public//com/google/collections/google-collections/1.0/google-collections-1.0.jar (0 B at 0.0 KB/
sec)
Downloaded: http://localhost:8081/repository/maven-public//junit/junit/3.8.2/junit-3.8.2.jar (0 B at 0.0 KB/sec)
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 31.553 s
[INFO] Finished at: 2023-10-14T11:30:08+08:00
[INFO] Final Memory: 9M/149M
[INFO] ------------------------------------------------------------------------

从结果看出:我们的依赖已经从我们私服maven-nexus中下载了。

3.2 镜像方式

镜像方式就不需要在pom文件中写多余的配置,主要是配置setting.xml文件。

3.2.1 修改配置文件

Maven要使用私服,需要修改 settings.xml 文件。修改settings.xml里的镜像源配置,之前配的阿里云镜像不能用

了,改成如下:

<mirror>
    <id>nexus-maven</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus Maven</name>
    <url>http://localhost:8081/repository/maven-public/</url>
</mirror>
3.3.2 在私服中修改访问权限,允许匿名用户访问

在这里插入图片描述

3.3.3 在私服中配置代理仓库地址,即配置镜像源

如果已经配置了可用的代理仓库并且把它加入到maven-public组中则不需要配置了。

否则的话需要进行下面的配置:

在这里插入图片描述

在这里插入图片描述

将上述地址换成:

# 阿里云
https://maven.aliyun.com/repository/public

点击Save保存即可。

3.3.4 在Maven的settings.xml中,配置私服的账号密码

<servers> 标签下,配置如下:

<server>
  <id>nexus-maven</id>
  <username>admin</username>
  <password>admin</password>
</server>

<server>
  <id>maven-test-release</id>
  <username>admin</username>
  <password>admin</password>
</server>

<server>
  <id>maven-test-snapshot</id>
  <username>admin</username>
  <password>admin</password>
</server>
3.3.5 项目配置私服

前面配置了本地Maven与私服的关系,接着要配置项目和私服的连接。

1、为项目创建对应的私服仓库,如果已有仓库,可以直接复用。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们要注意的就是仓库格式,有三个可选项:

Release:稳定版,表示存放可以稳定使用的版本仓库;

Snapshot:快照版,代表存储开发阶段的版本仓库;

Mixed:混合版,不区分格式,表示混合存储代码的仓库。

为了规范性,建议是Release、Snapshot格式的仓库,各自都创建一个。

在这里插入图片描述

在这里插入图片描述

2、在Maven工程的pom.xml文件中,配置对应的私服仓库地址。

<!-- 配置当前工程,在私服中保存的具体位置 -->
<distributionManagement>
    <repository>
        <!-- 这里对应之前 settings.xml 里配置的server-id -->
        <id>maven-test-release</id>
        <!-- 这里代表私服仓库的地址,大家只需要把后面的名字换掉即可 -->
        <url>http://localhost:8081/repository/maven-test-release/</url>
    </repository>
    <snapshotRepository>
        <id>maven-test-snapshot</id>
        <url>http://localhost:8081/repository/maven-test-release/</url>
    </snapshotRepository>
</distributionManagement>

3、将当前项目发布到私服仓库

这里可以执行mvn clean deploy命令,也可以通过IDEA工具完成。

本文的pom.xml文件的配置:

<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>hello-maven</artifactId>
<version>1.0-RELEASE</version>
<name>maven hello world</name>
# 使用IDEA工具
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building maven hello world 1.0-RELEASE
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello-maven ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ hello-maven ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello-maven ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ hello-maven ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hello-maven ---
[INFO] Surefire report directory: D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.apache.HelloWorldTest
init
Tests run: 2, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.05 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 1

[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hello-maven ---
[INFO] Building jar: D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\hello-maven-1.0-RELEASE.jar
[INFO] 
[INFO] --- maven-shade-plugin:3.2.4:shade (default) @ hello-maven ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\hello-maven-1.0-RELEASE.jar with D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\hello-maven-1.0-RELEASE-shaded.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ hello-maven ---
[INFO] Installing D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\hello-maven-1.0-RELEASE.jar to D:\DecompressionSoftwareInstall\apache-maven-3.3.9-bin\repository\org\example\hello-maven\1.0-RELEASE\hello-maven-1.0-RELEASE.jar
[INFO] Installing D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\pom.xml to D:\DecompressionSoftwareInstall\apache-maven-3.3.9-bin\repository\org\example\hello-maven\1.0-RELEASE\hello-maven-1.0-RELEASE.pom
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ hello-maven ---
Uploading: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/1.0-RELEASE/hello-maven-1.0-RELEASE.jar
Uploaded: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/1.0-RELEASE/hello-maven-1.0-RELEASE.jar (4 KB at 30.2 KB/sec)
Uploading: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/1.0-RELEASE/hello-maven-1.0-RELEASE.pom
Uploaded: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/1.0-RELEASE/hello-maven-1.0-RELEASE.pom (4 KB at 83.6 KB/sec)
Downloading: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/maven-metadata.xml
[IJ]-1-METADATA_DOWNLOADED-[IJ]-path=D:\DecompressionSoftwareInstall\apache-maven-3.3.9-bin\repository\org\example\hello-maven\maven-metadata-maven-test-release.xml-[IJ]-artifactCoord=-[IJ]-error=Could not find metadata org.example:hello-maven/maven-metadata.xml in maven-test-release (http://localhost:8081/repository/maven-test-release/)
Uploading: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/maven-metadata.xml
Uploaded: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/maven-metadata.xml (314 B at 8.1 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.594 s
[INFO] Finished at: 2023-10-14T17:44:49+08:00
[INFO] Final Memory: 21M/209M
[INFO] ------------------------------------------------------------------------
# 使用mvn deploy命令
$ mvn clean deploy
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building maven hello world 1.0-RELEASE
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ hello-maven ---
[INFO] Deleting D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello-maven ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ hello-maven ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello-maven ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ hello-maven ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hello-maven ---
[INFO] Surefire report directory: D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.apache.HelloWorldTest
init
Tests run: 2, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.047 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 1

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hello-maven ---
[INFO] Building jar: D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\hello-maven-1.0-RELEASE.jar
[INFO]
[INFO] --- maven-shade-plugin:3.2.4:shade (default) @ hello-maven ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\hello-maven-1.0-RELEASE.jar with D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\hello-maven-1.0-RELEASE-shaded.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ hello-maven ---
[INFO] Installing D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\target\hello-maven-1.0-RELEASE.jar to D:\DecompressionSoftwareInstall\apache-maven-3.3.9-bin\repository\org\example\hello-maven\1.0-RELEASE\hello-maven-1.0-RELEASE.jar
[INFO] Installing D:\zhangshixing\hexo\website-hexo-theme-particlex\source\_posts\Maven\code\Maven实战-私服搭建详细教程\HelloMaven\pom.xml to D:\DecompressionSoftwareInstall\apache-maven-3.3.9-bin\repository\org\example\hello-maven\1.0-RELEASE\hello-maven-1.0-RELEASE.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ hello-maven ---
Uploading: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/1.0-RELEASE/hello-maven-1.0-RELEASE.jar
Uploaded: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/1.0-RELEASE/hello-maven-1.0-RELEASE.jar (4 KB at 32.0 KB/sec)
Uploading: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/1.0-RELEASE/hello-maven-1.0-RELEASE.pom
Uploaded: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/1.0-RELEASE/hello-maven-1.0-RELEASE.pom (4 KB at 77.9 KB/sec)
Downloading: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/maven-metadata.xml
Uploading: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/maven-metadata.xml
Uploaded: http://localhost:8081/repository/maven-test-release/org/example/hello-maven/maven-metadata.xml (314 B at 7.5 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.535 s
[INFO] Finished at: 2023-10-14T18:19:10+08:00
[INFO] Final Memory: 21M/214M
[INFO] ------------------------------------------------------------------------

在这里插入图片描述

这里要注意:

由于配置了私服上的两个宿主仓库,一个为稳定仓库,另一个为快照仓库,所以发布时,默认会根据当前项目的

<version> 版本结尾,来选择上传到相应的仓库,例如结尾是SNAPSHOT,所以会被发布到快照仓库,如果结尾

不是这个后缀时,就会被发布到Release仓库。

还有就是,你要发布的包不能带有上级,即不能有parent依赖,否则在其他人在拉取该项目时,会找不到其父项

目而构建失败。要解决这个问题,可以先将parent项目打包并上传至远程仓库,然后再发布依赖于该parent项目

的子模块。

3.3.6 Nexus配置仓库组

如果我们所处的公司,是一个大型企业,不同团队都有着各自的宿主仓库,而你如果需要其他团队的组件,这时我

们不需要在pom.xml中,将远程仓库地址先改为其他团队的地址,而是可以创建一个仓库组来解决。

1、创建仓库组

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

大家可以看到,图中的Members区域代表当前仓库组的成员,而这些成员会按照你排列的顺序,具备不同的优先

级,越靠前的优先级越高。创建好仓库组后,接着可以去配置一下仓库组,这里有两种方式。

2、配置单个工程与仓库组的映射

这种方式只需修改pom.xml即可:

<repositories>
    <repository>
        <id>maven-test</id>
        <!-- 配置仓库组的地址 -->
        <url>http://localhost:8081/repository/maven-test/</url>
        <!-- 允许从中拉取稳定版的依赖 -->
        <releases>
            <enabled>true</enabled>
        </releases>
        <!-- 也允许从中拉取快照版的依赖 -->
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

<pluginRepositories>
    <pluginRepository>
        <id>plugin-group</id>
        <url>http://localhost:8081/repository/maven-test/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

在上述这组配置中,配置了<repositories><pluginRepositories>两个标签,第一个是普通依赖的仓库组

地址,第二个是插件依赖的仓库组地址,前者针对于pom.xml中的<dependency>标签生效,后者针对<plugin>

标签生效。

当你通过GAV坐标,引入一个依赖时,如果本地仓库中没找到,则会根据配置的仓库组地址,去到Nexus私服上拉

取依赖。不过因为仓库组是由多个仓库组成的,所以拉取时,会根据仓库的优先级,依次搜索相应的依赖,第一个

仓库将是最优先搜索的仓库。

3、配置本地Maven与仓库组的映射

上一种配置方式,只针对于单个Maven工程生效,如果你所有的Maven工程,都需要与Nexus私服上的仓库组绑

定,这时就可以直接修改settings.xml文件,如下:

<profile>
	<id>maven-test-group</id>
	<repositories>
		<repository>
			<id>nexus-maven</id>
			<url>http://localhost:8081/repository/maven-test-group/</url>
			<releases>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</releases>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</snapshots>
		</repository>
	</repositories>
 
	<pluginRepositories>
		<pluginRepository>
			<id>nexus-maven</id>
			<url>http://localhost:8081/repository/maven-test-group/</url>
			<releases>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</releases>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
</profile>

这组配置要写在<profiles>标签里面,其他的与前一种方式没太大区别,唯一不同的是多了一个

<updatePolicy>标签,该标签的作用是指定仓库镜像的更新策略,可选项如下:

  • always:每次需要Maven依赖时,都先尝试从远程仓库下载最新的依赖项;
  • daily:每天首次使用某个依赖时,从远程仓库中下载一次依赖项;
  • interval:X:每隔X个小时,下载一次远程仓库的依赖,X只能是整数;
  • never:仅使用本地仓库中已经存在的依赖项,不尝试从远程仓库中拉取。

Maven工程使用依赖时,首先会从本地仓库中查找所需的依赖项,如果本地仓库没有,则从配置的远程仓库下载

这时会根据<updatePolicy>策略来决定是否需要从远程仓库下载依赖。

还得激活一下上述配置:

<!-- seetings.xml文件配置 -->
<activeProfiles>
    <!-- 这里写前面配置的ID -->
	<activeProfile>maven-test-group</activeProfile>
</activeProfiles>

不过要记住,无论两种方式的哪一种,都只允许从私服上拉取依赖,如果你的某个工程,想要打包发布到私服上,

还是需要配置前面说的<distributionManagement>标签。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1135252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SK海力士:将成为引领人工智能时代的定制型半导体存储器公司

AI芯片是一种专门针对人工智能应用设计的芯片&#xff0c;能够高效地处理人工智能任务&#xff0c;如机器学习、深度学习等。AI芯片具有高运算速度、低功耗、便于集成等特点&#xff0c;是人工智能领域的重要发展方向之一。 目前&#xff0c;AI芯片主要分为GPU、FPGA和ASIC三种…

无符号数与有符号数的比较

无符号数与有符号数的比较 无符号数与有符号数的比较 无符号数与有符号数的比较一、无符号数与有符号数的比较二、无符号数与有符号数的取值范围 一、无符号数与有符号数的比较 一个有符号的整型数据可以分为两部分一部分是符号位、一部分是数字位 无符号数据类型只包含数字位…

8.3 矢量图层点要素单一符号使用二

文章目录 前言单一符号&#xff08;Single symbol&#xff09;渲染图片标记&#xff08;Raster Image marker&#xff09;QGis代码实现 动画标记&#xff08;Animated marker&#xff09;QGis代码实现 总结 前言 上一篇教程介绍了矢量图层点要素单一符号中简单标记和svg标记本…

初识Java语言

&#x1f435;本文将对Java的一些基本名称和基本数据类型进行讲解 1. 第一个Java程序 public class Hello {public static void main(String[] args) {System.out.println("Hello World");} } public class Hello 被class修饰的称为类&#xff0c;而当类被public修…

渗透测试工具-sqlmap使用

sqlmap是一个开源渗透测试的自动化工具&#xff0c;可以自动检测和利用SQL注入漏洞并接管数据库服务器。它配备了一个强大的检测引擎&#xff0c;许多用于终极渗透测试的利基功能&#xff0c;以及广泛的开关&#xff0c;包括数据库指纹识别、从数据库中获取数据、访问底层文件系…

NI Multisim 14.0使用技巧

资料 信号发生器 频率 占空比 振幅 偏置 示波器

【Java集合类面试二十八】、说一说TreeSet和HashSet的区别

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;说一说TreeSet和HashSet…

【Linux】从零开始学习Linux基本指令(三)

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;Linux入门 &#x1f525;该文章主要了解Linux操作系统下的基本指令。 ⚡️该篇为Linux指令部分的终章&#xff0c;如果您想了解前两篇文章的…

canvas常用方法,canvas绘制时钟案例

时钟案例实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Title</title><style>body {padding: 0;margin: 0;background-color: rgba(0, 0, 0, 0.1)}canvas {display: block;margin: …

list列表前端分页功能已经提交list时容易犯错的问题回顾

最近在开发中&#xff0c;有返回list需要前端分页的&#xff0c;而且后续还需提交整个list&#xff0c;虽说前端分页并不难&#xff0c;但还有会有一些问题&#xff1a; 从图片代码就可以很清晰的看到前端分页&#xff0c;如何点击页数翻页的&#xff0c;很简单&#xff0c;但…

《低代码指南》——如何用维格表实现餐饮数字化

信息 企业采购了相关餐饮 SssS 系统,很多餐饮企业一线员工对软件认知水平不足,在内部很难普遍推广餐饮系统员工不爱用,只有老板看,老板看完以后还要往下一级一级分发任务和指标各门店及岗位、仍存在办公协同困难大,一线员工还是人工处理数据,统计数据不及时、效率低、信息…

SSL证书优惠活动

当今互联网世界充满了网络威胁&#xff0c;安全性已经成为每个网站所有者和用户的首要关注。SSL证书是一种保护网站和用户数据安全的关键工具。为了帮助您提高您的网站安全性&#xff0c;在双十一来临之前&#xff0c;我们很高兴地宣布一项近乎疯狂的SSL证书优惠活动&#xff1…

信息科技如何做好风险管理

文章目录 前言介绍亮点结构读者对象 前言 信息科技对金融业务发展所起的作用是举足轻重的。 近年来&#xff0c;金融机构在战略规划中相继引入科技引领的概念。作为金融机构信息科技从业人员&#xff0c;我们笃信信息科技是一个非常有用的工具&#xff0c;一个兼具产品思维和管…

Ubuntu安装VM TOOLS解决虚拟机无法和WINDOWS粘贴复制问题

1&#xff1a;首先使用VMware Workstation安装一个Ubuntu的系统。 2&#xff1a;现在已经不建议安装VM TOOLS。建议安装OPEN-VM-TOOLS。 3&#xff1a;进入系统使用下面的命令安装。 sudo apt install open-vm-tools 4&#xff1a;提示下面错误&#xff0c;Package open-vm…

大麦抢票订单生成 大麦订单一键生成 大麦订单截图

1、能够一键的进行添加&#xff0c;生成的假订单是没有水印的&#xff0c;界面也很真实。 2、在软件中输入生成的信息&#xff0c;这里输入的是商品信息&#xff0c;选择生成的商品图片&#xff0c;最后生成即可。 新版大麦订单生成 图样式展示 这个样式图就是在大麦生成完…

学生专用台灯怎么选?双十一专业学生护眼台灯推荐

台灯应该是很多家庭都会备上一盏的家用灯具&#xff0c;很多大人平时间看书、用电脑都会用上它&#xff0c;不过更多的可能还是给家中的小孩学习、阅读使用的。而且现在的孩子近视率如此之高&#xff0c;这让家长们不得不重视孩子的视力健康问题。那么孩子学习使用的台灯应该怎…

禧侬农韶关基金发布会

禧侬农信息科技&#xff08;深圳&#xff09;有限公司韶产业引导基金发布会圆满成功 红润控股集团旗下子公司禧侬农信息科技&#xff08;深圳&#xff09;有限公司与香港开心联众集团在政府的见证和支持下&#xff0c;达成了产业引导基金的战略合作伙伴关系。这意味着未来禧侬…

UG\NX二次开发 修改dlx对话框标题的方法

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介 UG\NX二次开发 修改dlx对话框标题的方法 效果 代码 theDialog->TopBlock()->FindBlock("Dialog")->GetProperties()->SetString("Label"…

如何为你的地图数据设置地图样式?

地图样式设置是GIS系统中非常重要的功能模块&#xff0c;水经微图Web版本最近对符号样式功能模块进行了升级。 你可以通过以下网址直接打开访问&#xff1a; https://map.wemapgis.com 现在我们为大家分享一下水经微图Web版中&#xff0c;如何为你标注的地图数据设置地图样式…

【Linux】Socket(初识网络)

目录 一、网络初识1.协议2.OSI七层模型3.TCP/IP五层模型4.通讯原理图解 二、socket1.源IP和目的IP2.端口号3.端口号和进程ID4.初识TCP、UCP协议5.网络字节序 三、socket接口1.常见API2.sockaddr结构 一、网络初识 网络在计算机中的位置。 网络也是一种软件&#xff0c;所以网…