我有一个项目,只将一个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的配置文件部分。