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

时间:2018-06-10 17:34:55

标签: maven

我有一个只将一个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的一部分进行部署。

Here是指向与我的问题相关的特定版本中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>

1 个答案:

答案 0 :(得分:0)

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

我试过了:

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

以下是我找到的解决方法:

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

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