当前位置: 首页 > news >正文

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

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 (0B 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 secResults :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 secResults :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>标签。

相关文章:

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

Maven实战-私服搭建详细教程 1、为什么需要私服 首先我们为什么需要搭建Maven私服&#xff0c;一切技术来源于解决需求&#xff0c;因为我们在实际开发中&#xff0c;当我们研发出来一个 公共组件&#xff0c;为了能让别的业务开发组用上&#xff0c;则搭建一个远程仓库很有…...

uniapp-自定义表格,右边操作栏固定

uniapp-自定义表格&#xff0c;右边操作栏固定 在网上找了一些&#xff0c;没找到特别合适的&#xff0c;收集了一下其他人的思路&#xff0c;基本都是让左边可以滚动&#xff0c;右边定位&#xff0c;自己也尝试写了一下&#xff0c;有点样式上的小bug&#xff0c;还在尝试修…...

基于Electron27+React18+ArcoDesign客户端后台管理EXE

基于electron27.xreact18搭建电脑端exe后台管理系统模板 electron-react-admin 基于electron27整合vite.jsreact18搭建桌面端后台管理程序解决方案。 前几天有分享electron27react18创建跨平台应用实践&#xff0c;大家感兴趣可以去看看。 https://blog.csdn.net/yanxinyun1990…...

QT5交叉编译保姆级教程(arm64、mips64)

什么是交叉编译&#xff1f; 简单说&#xff0c;就是在当前系统平台上&#xff0c;开发编译运行于其它平台的程序。 比如本文硬件环境是x86平台&#xff0c;但是编译出来的程序是在arm64架构、mips64等架构上运行 本文使用的操作系统&#xff1a;统信UOS家庭版22.0 一、安装…...

python计算图片的RGB值,可以作为颜色的判断条件

python计算图片的RGB值&#xff0c;可以作为颜色的判断条件 import colorsys import PIL.Image as Imagedef get_dominant_color(image):max_score 0.0001dominant_color Nonefor count,(r,g,b) in image.getcolors(image.size[0]*image.size[1]):# 转为HSV标准saturation c…...

oracle 日期

日期加减 Oracle中日期进行加减可以使用多种方式&#xff0c;以下介绍三种 一种是针对天的操作&#xff0c;适用于对日&#xff0c;时&#xff0c;分&#xff0c;秒的操作&#xff0c; 一种是对月的操作&#xff0c;适用于月&#xff0c;年的操作&#xff0c; 一种是使用INTER…...

JVM堆内存解析

一、JVM堆内存介绍 Java大多数对象都是存放在堆中&#xff0c;堆内存是完全自动化管理&#xff0c;根据垃圾回收机制不同&#xff0c;Java堆有不同的结构&#xff0c;下面是我们一台生产环境服务器JVM堆内存空间分配情况&#xff0c;JVM只设置了-Xms2048M -Xmx2048M。 1、JVM堆…...

C#Onnx模型信息查看工具

效果 Netron效果 项目 代码 using Microsoft.ML.OnnxRuntime; using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms;namespace Onnx_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string…...

RK3588 ubuntu系统安装opencv

废话不多说直接上步骤&#xff1a; 先切换至root用户 sudo su 输入密码先更新一下本地软件 apt update apt upgrade 安装相关环境 apt install build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-…...

常用的vue UI组件库

背景&#xff1a;Vue.js 是一个渐进式 javascript 框架&#xff0c;用于构建 UIS&#xff08;用户界面&#xff09;和 SPA&#xff08;单页应用程序&#xff09;。UI 组件库的出现提高了我们的开发效率&#xff0c;增强了应用的整体外观、感觉、交互性和可访问性&#xff0c;下…...

防范欺诈GPT

去年&#xff0c;ChatGPT的发布让全世界都感到惊讶和震惊。 突然间出现了一个平台&#xff0c;它比之前的任何其他技术都更深入地了解互联网。人工智能可以被训练成像阿姆一样说唱&#xff0c;以世界著名诗人的风格写作&#xff0c;并精确地翻译内容&#xff0c;以至于它似乎能…...

【Java】多线程案例(单例模式,阻塞队列,定时器,线程池)

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 实现安全版本的单例模式饿汉模式类和对象的概念类对象类的静态成员与实例成员 懒汉模式如何保证…...

STM32:使用蓝牙模块

一、蓝牙概要 蓝牙是一种常见的无线通信协议&#xff0c;通常用于短距离通信。蓝牙分为经典蓝牙和低功耗蓝牙(BLE)。经典蓝牙通常用于需要持续传输数据的设备&#xff0c;比如蓝牙耳机等。低功耗蓝牙通常用于只需要间歇性传输数据的设备&#xff0c;比如运动手环。 蓝牙…...

Blazor 虚拟滚动/瀑布流加载Table数据

page "/virtualScrolling" using BlazorApp.Data<h3>Table 虚拟滚动行</h3> <h4>Table 组件显示大数据时通常采用分页加载数据&#xff0c;还有一种虚拟行的技术类似手机滚动到底部时后台自动加载数据</h4><p>快速滚动时显示行占位&am…...

数字化浪潮下,AI数字人融入多元化应用场景

随着AI数字人技术的发展&#xff0c;各个行业都在不断挖掘数字人更多的潜力&#xff0c;VR全景中的AI数字人功能逐渐成为了一种新颖的用户交互方式。AI数字人将企业的文化、品牌价值、商业服务等充分结合为一体&#xff0c;为企业提供了全新的机会&#xff0c;从客户互动到营销…...

JVM虚拟机:JVM的垃圾回收清除算法(GC)有哪些

垃圾回收清除算法 引用计数法 标记清除 拷贝算法 标记压缩 引用计数法 有一个引用指向对象,那么引用计数就加1,少一个引用指向,那么引用计数就减1,这种方法了解一下就好,JVM机会不会使用这种方法,因为它在每次对象赋值的时候都要维护引用计数器,且计数器本身也有一定的…...

我应该删除低质量页面以提高Google排名吗?

为什么考虑删除低质量页面&#xff1f; 上个月&#xff0c;根据Google的搜索团队John Mueller和Gary Illyes在 “Search Off the Record”播客中的讨论&#xff0c;质量是影响搜索的几乎每一个方面的关键因素。 虽然高质量的内容不能保证高排名&#xff0c;但它可以影响Googl…...

【实战Flask API项目指南】之六 数据库集成 SQLAlchemy

实战Flask API项目指南之 数据库集成 本系列文章将带你深入探索实战Flask API项目指南&#xff0c;通过跟随小菜的学习之旅&#xff0c;你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧&#xff01; 前言 在上一篇文章中&#xff0c;我们实现了…...

MFC网络通信-Udp服务端

目录 1、UI的布局 2、代码的实现&#xff1a; &#xff08;1&#xff09;、自定义的子类CServerSocket &#xff08;2&#xff09;、重写OnReceive事件 &#xff08;3&#xff09;、在CUdpServerDlg类中处理 &#xff08;4&#xff09;、在OnInitDialog函数中 &#xff0…...

最简单且有效的msvcp140.dll丢失的解决方法,有效的解决msvcp140.dll丢失

在我们使用电脑的过程中&#xff0c;有时会遇到一些令人困扰的问题&#xff0c;如msvcp140.dll文件丢失。对于许多不熟悉这方面技术的小伙伴来说&#xff0c;遇到msvcp140.dll丢失的问题可能会觉得棘手。其实这是一个很常见的问题&#xff0c;并且解决起来并不复杂。接下来将给…...

HBase理论与实践-基操与实践

基操 启动&#xff1a; ./bin/start-hbase.sh 连接 ./bin/hbase shell help命令 输入 help 然后 <RETURN> 可以看到一列shell命令。这里的帮助很详细&#xff0c;要注意的是表名&#xff0c;行和列需要加引号。 建表&#xff0c;查看表&#xff0c;插入数据&#…...

内存管理设计精要

系统设计精要是一系列深入研究系统设计方法的系列文章&#xff0c;文中不仅会分析系统设计的理论&#xff0c;还会分析多个实际场景下的具体实现。这是一个季更或者半年更的系列&#xff0c;如果你有想要了解的问题&#xff0c;可以在文章下面留言。 持久存储的磁盘在今天已经不…...

Java——StringBuffer与StringBuilder的区别

Java——StringBuffer与StringBuilder的区别 StringBuffer和StringBuilder是Java中用于处理字符串的两个类&#xff0c;它们之间的主要区别在于线程安全性和性能方面。 1. 线程安全性&#xff1a; StringBuffer&#xff1a;StringBuffer 是线程安全的&#xff0c;所有的公共方…...

基于深度学习的菠萝与果叶视觉识别及切断机构设计

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、课题内容二、总体方案确定2.1 方案选择2.2 菠萝的视觉识别流程2.3 菠萝果叶切断机构设计流程 三 基于深度学习的菠萝检测模型3.1 卷积神经网络简介3.2 YOLO卷积神经网络3.3 图像采集与数据制作3.4 数据训练与…...

springboot整合七牛云oss操作文件

文章目录 springboot整合七牛云oss操作文件核心代码&#xff08;记得修改application.yml配置参数⭐&#xff09;maven依赖QiniuOssProperties配置类UploadControllerResponseResult统一封装响应结果ResponseType响应类型枚举OssUploadService接口QiniuOssUploadServiceImpl实现…...

跨国传输的常见问题与对应解决方案

在今天的全球化时代&#xff0c;跨国数据传输已经成为一个不可或缺的需求。不论是个人还是企业&#xff0c;都需要通过网络将文件或数据从一个国家传输到另一个国家&#xff0c;以实现信息共享、协作、备份等目的。然而&#xff0c;跨国数据传输并不是一项容易的任务&#xff0…...

Git(七).git 文件夹瘦身,GitLab 永久删除文件

目录 一、问题背景二、问题复现2.1 新建项目2.2 上传大文件2.3 上传结果 三、解决方案3.1 GitLab备份与还原1&#xff09;备份2&#xff09;还原 3.2 删除方式一&#xff1a;git filter-repo 命令【推荐】1&#xff09;安装2&#xff09;删除本地仓库文件3&#xff09;重新关联…...

多线程锁的升级原理是什么

在 Java 中&#xff0c;锁共有 4 种状态&#xff0c;级别从低到高依次为&#xff1a;无状态锁&#xff0c;偏向锁&#xff0c;轻量级锁和重量级锁状态&#xff0c;这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级。 多线程锁锁升级过程 如下图所示 多线程锁的升级过程…...

金山文档轻维表之删除所有行记录

目前脚本文档里面的只有删除行记录功能&#xff0c;但是需要指定ID值&#xff0c;不能实现批量删除&#xff0c;很多人反馈但是官方无回应&#xff0c;挺奇怪的 但是批量删除的需求我很需要&#xff0c;最后研究了一下&#xff0c;还是挺容易实现的 测试&#xff1a; 附上脚本…...

站坑站坑站坑站坑站坑

站坑站坑站坑站坑站坑站坑站坑...