如何将部署配置排除在已部署的 pom .xml之外?



我有一个项目,只将一个pom.xml部署到Maven Central。 它旨在用作父 POM。 因此,包装是pom的。

我的问题是由于以下重叠而出现的:

  • 要部署的信息,即工件内容,完全包含在pom.xml中。

  • Maven正确部署所需的其他信息也在pom.xml内。

因此,部署配置与我的父 POM 一起部署。 默认情况下,每个使用我的父POM的项目在执行mvn release时也会部署到Maven Central。 这是上述重叠的不良副作用。

我想部署父 POM 时没有部署信息。 我该怎么做?

(我强烈怀疑我可以以某种方式将要部署的 POM 与执行部署的 POM 分开,但我不知道如何。

上述"部署信息"包括:

  • 构建插件 (/project/build/plugins/...(:
    • org.apache.maven.plugins:maven-gpg-plugin
    • org.apache.maven.plugins:maven-source-plugin
    • org.sonatype.plugins:nexus-staging-maven-plugin
  • Maven分销管理信息 (/project/distributionManagement(

另请注意,还有其他构建插件配置,我实际上将其部署为已部署 POM 的一部分。

这是指向与我的问题相关的特定版本中pom.xml的链接。

这是上面链接的文件的成绩单,我实际想要部署的所有内容都替换为<!-- ... -->。 因此,这仅包含我不想包含在已部署工件中的pom.xml部分:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<!-- ... -->
<build>
<plugins>
<!-- ... -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>${version.plugin.gpg}</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${version.plugin.source}</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- ... -->
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>${version.plugin.nexus-staging}</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
<!-- ... -->
</build>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</project>

回答我自己的问题,我认为它不能完全按照我要求的方式完成。 但是,我找到了一个可行的替代方案,至少可以让我避免当前的问题。

我试过了:

  • 使用<resources>从资源中删除pom.xml,然后添加其他pom.xml。这是行不通的,因为显然 Maven 在指定<packaging>pom</packaging>时总是使用主 POM 进行部署。
  • 使我要部署的模块成为外部模块的子模块。我将所有与部署相关的配置放入外部模块中。这是行不通的,因为 Maven 希望在该特定子模块中定义每个子模块的部署配置。

这是我找到的解决方法:

我将所有与部署相关的配置放入同一 POM 中的新配置文件中,默认情况下该配置文件不处于活动状态。 子模块仍将继承此配置文件。 但由于默认情况下它不处于活动状态,因此除非显式激活,否则不会造成任何伤害。

如果有人感兴趣,这里是更改后的版本。 这是特定的提交,您可以在其中看到部署配置向下移动到POM的配置文件部分。

最新更新