仓库类型
Nexus
提供了三种仓库:
- 仓库组:逻辑仓库,用于包含一批宿主、代理仓库,开发者只需要单独引用仓库组就能使用一批组内的仓库
- 宿主仓库:数据存储在私服主机上的仓库。通常公司内部发版的包都部署在这里(第三方的包也发在这里)
- 代理仓库:类似于VPN,局域网中请求私服主机的代理仓库,这个代理仓库会转发我们的请求给真实的远程仓库
Maven
可以直接从宿主仓库、代理仓库下载,但是这样我们要在settings.xml
中配置许多个仓库,如果我们将所需的仓库添加到一个【仓库组】中,那么就仅需要配置一个仓库地址在settings.xml
中就能用了。当Maven
用到代理仓库时,代理仓库会把请求再转发给远程仓库。关系图如下所示:
而我们常规开发时通常会这样使用这几种类型的仓库:
创建宿主仓库
创建代理仓库
- 注意,如果
Online
那一栏不勾上,外面会显示offline
,就会导致无法进行Analyze
。
创建仓库组
构建索引
在Nexus3.x
版本下,已经不支持 构建远程索引实现搜索 功能了,换句话说就是不能同步远程仓库的索引文件了。
Nexus Repository Manager 3.x does NOT support usage of remote index for searches (and other purposes) at all. If you want this feature I suggest to stick with Nexus Repository Manager 2 for now.
权限管理
这部分内容比较单薄,主要 创建角色时能看懂权限 以及 创建用户时能分配角色就行了。
Privileges
,具体的单项权限(会有释义),通过nexus
后他的Security
菜单里可以看到。Roles
,角色Users
,用户
使用
我给自己创建了一个用于发布包的角色,并把角色分配给了一个账号:
下面实战一下 私服仓库下载 以及 自动发布:
从私服仓库下载
在settings.xml
配置文件中,为当前机器统一配置使用的私服仓库地址,而且一般使用私服中的仓库组。我们在settings.xml
中的<profiles>
里添加元素<profile>
即可:
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://127.0.0.1:8082/repository/maven-public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus Plugin Repository</name>
<url>http://127.0.0.1:8082/repository/maven-public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
然后在<activeProfiles>
里添加<activeProfile>
来激活某个<profile>
:
<activeProfile>nexus</activeProfile>
<activeProfile>
元素中使用<profile>
元素的id
属性。
但是更新pom.xml
文件时,发现它还是从【Maven 中央仓库】里下载:
这是因为我们并没有强制走私服仓库,对于此时的Maven
来说,私服的仓库也算是远程仓库。我们给它加上一个镜像,让镜像指向我们的私服,如此就强制让所有的请求都走镜像了,那么我们就得在<mirrors>
元素中添加<mirror>
元素了:
<mirror>
<id>nexus</id> <!-- 这是镜像的ID -->
<mirrorOf>*</mirrorOf> <!-- *表示对所有的请求都进行拦截 -->
<url>http://127.0.0.1:8082/repository/maven-public/</url>
</mirror>
然而这并没有结束,如果发生了maven-public
查找不到的依赖(什么情况下会找不到呢?比如咱们的中央仓库),那么还会去查【Maven】自带的中央仓库。所以咱们需要禁止【Maven】自带的中央仓库:
将所有repository
的id
修改为central
,直接覆盖【Maven】超级pom.xml
中的中央仓库(在M2_HOME/lib/maven-model-builder.jar
里的pom.xml
里,定义了最顶级的中央仓库地址),相当于此时唯一的远程中央仓库变成了我们自己配置的两个仓库:
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<name>Nexus</name>
<url>http://central/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Nexus Plugin Repository</name>
<url>http://central/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
http://central/
地址没有什么意义,因为所有的下载请求都走镜像了。
配置pom.xml自动发布组件
我们需要做两个步骤:
配置项目
pom.xml
,添加想要发布的地址:<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://127.0.0.1:8082/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://127.0.0.1:8082/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
在
settings.xml
里面的<servers>
元素里添加<server>
,用于表明使用哪个账号上传:<server>
<id>nexus-releases</id>
<username>codeleven</username>
<password>111111</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>codeleven</username>
<password>111111</password>
</server>
之后用
idea
的deploy
就行了:[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ RookieMaven ---
Downloading from nexus: http://127.0.0.1:8082/repository/maven-public/org/codehaus/plexus/plexus-utils/1.5.6/plexus-utils-1.5.6.pom
Downloaded from nexus: http://127.0.0.1:8082/repository/maven-public/org/codehaus/plexus/plexus-utils/1.5.6/plexus-utils-1.5.6.pom (0 B at 0 B/s)
Downloading from nexus: http://127.0.0.1:8082/repository/maven-public/org/codehaus/plexus/plexus/1.0.12/plexus-1.0.12.pom
Downloaded from nexus: http://127.0.0.1:8082/repository/maven-public/org/codehaus/plexus/plexus/1.0.12/plexus-1.0.12.pom (0 B at 0 B/s)
Downloading from nexus: http://127.0.0.1:8082/repository/maven-public/org/codehaus/plexus/plexus-utils/1.5.6/plexus-utils-1.5.6.jar
Downloaded from nexus: http://127.0.0.1:8082/repository/maven-public/org/codehaus/plexus/plexus-utils/1.5.6/plexus-utils-1.5.6.jar (0 B at 0 B/s)
Downloading from nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/1.0-SNAPSHOT/maven-metadata.xml
Downloaded from nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/1.0-SNAPSHOT/maven-metadata.xml (771 B at 23 kB/s)
Uploading to nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/1.0-SNAPSHOT/RookieMaven-1.0-20210908.141729-5.jar
Uploaded to nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/1.0-SNAPSHOT/RookieMaven-1.0-20210908.141729-5.jar (2.6 kB at 33 kB/s)
Uploading to nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/1.0-SNAPSHOT/RookieMaven-1.0-20210908.141729-5.pom
Uploaded to nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/1.0-SNAPSHOT/RookieMaven-1.0-20210908.141729-5.pom (1.6 kB at 49 kB/s)
Downloading from nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/maven-metadata.xml
Downloaded from nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/maven-metadata.xml (285 B at 10 kB/s)
Uploading to nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/1.0-SNAPSHOT/maven-metadata.xml
Uploaded to nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/1.0-SNAPSHOT/maven-metadata.xml (771 B at 18 kB/s)
Uploading to nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/maven-metadata.xml
Uploaded to nexus-snapshots: http://127.0.0.1:8082/repository/maven-snapshots/com/codeleven/oa/RookieMaven/maven-metadata.xml (285 B at 6.8 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.496 s
[INFO] Finished at: 2021-09-08T22:17:29+08:00
[INFO] ------------------------------------------------------------------------
或者使用
mvn clean deploy
进行清理、编译、测试、打包、发布
手动部署组件
对于一些商用jar包
,我们也常想上传到Nexus
里,但是这货不能直接用mvn deploy
进行自动发布。现在常用的有两种方法:
命令行:
mvn deploy:deploy-file -DgroupId=<组织ID> -DartifactId=<项目ID> -Dversion=<版本号> -Dpackaging=<打包方式,通常是jar> -Dfile=<要上传的包路径> -Durl=<要上传到哪个URL里> -DrepositoryId=<要上传的仓库ID>
通过
Nexus Repostory Manager
后台管理界面进行上传:
对于有其他依赖的**jar包**
,需要这样上传。否则项目里使用这个jar包
就不会下载传递性依赖:
还得上传第三方jar包的pom.xml
文件