在 Maven 多模块项目中,
Parent
Module A
Module B
我想将父级和模块 A 工件上传到 Maven Central,但不上传模块 B 工件。
我正在使用 nexus-staging-maven-plugin。我在模块 B 中为 maven-deploy-plugin 和 nexus-staging-maven-plugin 添加了 Skip 参数,但构建仍在将模块 B 上传到 mavencentral。
有什么办法可以跳过模块B上传。
经过一番努力,我找到了阻止某些模块发布到 Maven Central (OSSRH) 的方法。 maven-deploy-plugin 将工件上传/部署到 OSSRH,然后 nexus-staging-maven-plugin 暂存并发布它。诀窍是仅将 Nexus 插件添加到我们要发布的模块中。我将以下内容添加到父级和 moduleA pom,但没有添加到 moduleB pom。
<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>${nexus-staging-maven-plugin.version}</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
...
通过此设置,deploy-plugin 上传父级、moduleA 和 moduleB 工件,但 nexus-staging-maven-plugin 仅暂存并发布父级和 moduleA。由于 moduleB pom.xml 中没有 Nexus 插件配置,因此其工件不会发布到 OSSRH。
但是,如果 moduleB pom.xml 中没有 nexus-staging 插件,如果您运行
mvn nexus-staging:release
、mvn nexus-staging:drop
或 mvn nexus-staging:rc-list
等 nexus-staging 目标,您将收到“missing nexusUrl”错误,如果您想要运行 nexus-staging 的目标,然后临时将 nexus-staging 插件片段添加到 moduleB;运行这些命令并在工作完成后从 moduleB 中删除插件。
我们还可以使用此解决方法来上传单个模块。例如,我错误地上传了没有parent-1.0工件的moduleA-1.0。当我再次尝试上传 Parent-1.0 和 moduleA-1.0 工件时,它失败了,因为 OSSRH 不允许覆盖工件。由于父母失踪,该版本被破坏。为了仅上传parent-1.0,我将nexus-staging插件保留在parent中,将其从moduleA中删除,并且能够仅上传parent-1.0。