maven - 如何将部署配置保留在已部署的 pom.xml 之外?
问题描述
我有一个项目只将一个部署pom.xml
到 Maven Central。它旨在用作父 POM。因此,包装是pom
。
我的问题是由于以下重叠而出现的:
要部署的信息,即工件内容,完全包含在
pom.xml
.Maven正确部署所需的附加信息也在
pom.xml
.
结果,部署配置与我的父 POM 一起部署。默认情况下,每个使用我的父 POM 的项目也会在执行时部署到 Maven Central mvn release
。这是上述重叠的不良副作用。
我想在没有部署信息的情况下部署父 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 在指定时总是使用主 POM 进行部署<packaging>pom</packaging>
。 - 制作我想要部署外部模块的子模块的模块。我将所有与部署相关的配置都放入了外部模块中。这不起作用,因为 Maven 期望在该特定子模块中定义每个子模块的部署配置。
这是我找到的解决方法:
我将所有与部署相关的配置放入同一个 POM 中的一个新配置文件中,默认情况下它是不活动的。子模块仍将继承此配置文件。但是由于默认情况下它是不活动的,所以除非明确激活,否则它不会造成任何伤害。
推荐阅读
- c - 我的 BFS 的 C 代码给出了不正确的(绝对废话)输出
- react-native - React Native 在渲染方法中调用函数
- ios - ios auto-renewable-subscriptions - 模拟取消操作
- c# - Auth0 + xamarin 身份验证问题:兑换代码时出错:未经授权/无描述
- javascript - 获取水平滚动条的高度
- python-3.x - Doc2vec 模型的语义和句法性能
- javascript - 如何在回调函数中访问全局范围变量?[JS]
- ios - 将标签和按钮添加到 UICollectionView xcode 9,swift 4
- swift - 无法使具有标识符 cellId 的单元出列 - 必须为标识符注册一个 nib 或一个类,或者在情节提要中连接一个原型单元
- python - python Time.clock太短的结果