Maven 发布插件:如何在发布时仅部署分发 jar:执行
Posted
技术标签:
【中文标题】Maven 发布插件:如何在发布时仅部署分发 jar:执行【英文标题】:Maven release plugin: How to deploy only a distribution jar on release:perform 【发布时间】:2013-07-13 06:30:16 【问题描述】:我有一个多模块项目,正在构建的最后一个模块是应用程序的分发 zip。
core/
plugins/
plugins/logger
plugins/social
...
assemble/
我想以 Maven 工件的形式分发应用程序。而且我不想用它来部署模块工件。
但是release
插件需要从根目录运行(我想做所有常见的事情,比如更新版本、标记、提交这些更改等)
如何告诉发布插件部署哪些工件?
请注意,这与仅限制部署插件不同,因为发布插件似乎以某种内部方式调用部署插件。 (不确定。)
【问题讨论】:
【参考方案1】:似乎 Release 插件行为已修复,现在可以正确调用 deploy:deploy
。
所以我使用我的标准技巧来抑制默认插件执行。根pom.xml
:
<!-- Don't deploy all artifacts. Overridden in submodules. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<executions> <execution> <id>default-deploy</id> <phase>none</phase> </execution></executions>
</plugin>
还有 dist 模块pom.xml
:
<!-- Enable deploy for this submodule. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<executions> <execution> <id>default-deploy</id> <phase>deploy</phase> </execution></executions>
</plugin>
【讨论】:
【参考方案2】:release:perform 并没有那么神奇。它通过在 release:prepare 期间创建的标签检查代码。默认目标是“部署”。如果您在 pom.xml 的 distributionManagement 中指定了一个站点,它将是“deploy site-deploy”。这些步骤也可以手动完成。
如果您从不想部署这些工件(不是在开发或发布期间),我更喜欢skip,而不是使用未定义的阶段。 如果仅在发布期间需要,则应在 release-profile 中指定。
【讨论】:
以上是关于Maven 发布插件:如何在发布时仅部署分发 jar:执行的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 opsworks 部署时仅在特定层中的第一个实例上运行命令?
如何从 WebSphere Liberty Maven 插件部署到 WebSphere Liberty 应用程序目录?