如何在不对存储库进行硬编码的情况下在 Maven 中部署其他工件?
How to deploy additional artifacts in maven without hardcoding a repository?
在我的 maven pom 中,我有一个额外的 jar 文件,我想将其包含在我的可部署文件中。我已经成功构建了 jar 文件,我想我会像这样使用 maven-deploy-plugin(版本方面,我使用的是 dependencyManagement 中的 2.8.2):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<executions>
<execution>
<id>deploy-special-jar</id>
<phase>deploy</phase>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
<repositoryId>${project.distributionManagement.repository.id}</repositoryId>
<url>${project.distributionManagement.repository.url}</url>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}-special</version>
<file>${project.build.directory}/special.jar</file>
</configuration>
</execution>
</executions>
</plugin>
效果很好,但有一个小问题。如果您注意到,上面的 pom 使用 project.distributionManagement.repository.url 作为 repositoryId 和 url 参数。然而,这意味着无论我是构建快照还是发布版本,我总是部署到我的发布区域,这并不理想。如果我正在构建快照怎么办?嗯,答案好像是把project.distributionManagement.repository.url改成project.distributionManagement.snapshotRepository.url
我不喜欢手动更改这些行的想法,因为我喜欢使用 maven-release-plugin 在快照版本和发布版本之间切换。现在,我必须添加一些脚本来每次更改这些行。这是可能的,但并不理想。
似乎早在 2008 年之前就有人问过这个确切的问题,但没有一个很好的答案:
http://maven.40175.n5.nabble.com/problems-with-the-maven-deploy-plugin-td107307.html
所以,我想我会把它添加到这里看看人们想出了什么。
我正在考虑使用 build-helper 插件来动态更改此 属性,但这似乎是一个潜在的问题,尤其是因为
之前有人试图做类似的事情(出于其他原因,但概念相似):
Check if Maven pom is SNAPSHOT
那么,这里的正确答案是什么?这应该是一个功能请求吗?或者,是否有一种简单的方法可以解决人们使用的这个问题?我很好奇其他人做了什么。有没有人对 build-helper 插件有好运?
谢谢!
这听起来更像是第二次执行 maven-jar-plugin(在删除东西之后),这将导致通过 mvn deploy
自动上传,不需要做这些奇怪的事情...
或者可能正在使用 maven-assembly-plugin 创建补充工件(一个或多个)...或者可能是 maven-shade-plugin。我不确定你是如何剥离的...
在我的 maven pom 中,我有一个额外的 jar 文件,我想将其包含在我的可部署文件中。我已经成功构建了 jar 文件,我想我会像这样使用 maven-deploy-plugin(版本方面,我使用的是 dependencyManagement 中的 2.8.2):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<executions>
<execution>
<id>deploy-special-jar</id>
<phase>deploy</phase>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
<repositoryId>${project.distributionManagement.repository.id}</repositoryId>
<url>${project.distributionManagement.repository.url}</url>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}-special</version>
<file>${project.build.directory}/special.jar</file>
</configuration>
</execution>
</executions>
</plugin>
效果很好,但有一个小问题。如果您注意到,上面的 pom 使用 project.distributionManagement.repository.url 作为 repositoryId 和 url 参数。然而,这意味着无论我是构建快照还是发布版本,我总是部署到我的发布区域,这并不理想。如果我正在构建快照怎么办?嗯,答案好像是把project.distributionManagement.repository.url改成project.distributionManagement.snapshotRepository.url
我不喜欢手动更改这些行的想法,因为我喜欢使用 maven-release-plugin 在快照版本和发布版本之间切换。现在,我必须添加一些脚本来每次更改这些行。这是可能的,但并不理想。
似乎早在 2008 年之前就有人问过这个确切的问题,但没有一个很好的答案: http://maven.40175.n5.nabble.com/problems-with-the-maven-deploy-plugin-td107307.html 所以,我想我会把它添加到这里看看人们想出了什么。
我正在考虑使用 build-helper 插件来动态更改此 属性,但这似乎是一个潜在的问题,尤其是因为 之前有人试图做类似的事情(出于其他原因,但概念相似): Check if Maven pom is SNAPSHOT
那么,这里的正确答案是什么?这应该是一个功能请求吗?或者,是否有一种简单的方法可以解决人们使用的这个问题?我很好奇其他人做了什么。有没有人对 build-helper 插件有好运?
谢谢!
这听起来更像是第二次执行 maven-jar-plugin(在删除东西之后),这将导致通过 mvn deploy
自动上传,不需要做这些奇怪的事情...
或者可能正在使用 maven-assembly-plugin 创建补充工件(一个或多个)...或者可能是 maven-shade-plugin。我不确定你是如何剥离的...