我想在@yegor256 的回答的基础上再做一点…… 8 年零 4 个月后!
我发现自己在这里陷入了一些遗留的 Maven 配置的杂草中,这些配置充满了cruft。来自 Maven 的思维模式,尽管从现在到积极的黑客攻击已经有几年了,但我正在重新熟悉 Maven 生命周期。
TLDR……mvn help:effective-pom
是你的朋友。经常使用 IDE 的工具查看有效的 POM(NetBeans 使这变得容易。我在 IntelliJ 中添加了一个键盘快捷键。)
在我正在审查的配置中,以前的开发人员创建了两 (2) 个deploy-file
执行,一war
、一jar
。
<build>
...
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<executions>
<execution>
<id>deploy-war</id>
<phase>deploy</phase>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
... omitted ...
</configuration>
</execution>
<execution>
<id>deploy-jar</id>
<phase>deploy</phase>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
... omitted ...
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
我知道这些执行将附加到阶段的default-deploy
绑定,deploy
并在日志中观察到这种行为。将default-deploy
运行,上传一个空的战争文件,然后deploy-war
将运行,上传并覆盖第一个战争文件。
存在几个选项。
skip
和combine.self="override"
(我的偏好)
如前所述,<skip>
作为一个<configuration>
选项使用是可行的。<phase>
它比设置设置为更安全且更便携none
。
但是,它将被其他执行继承(当然如介绍的那样)。为了防止这种情况,您必须明确告诉您的其他<execution>
配置不要继承。
...
...
<executions>
<execution>
<id>deploy-war</id>
<phase>deploy</phase>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration combine.self="override">
... omitted ...
</configuration>
</execution>
...
...
覆盖default-deploy
combine.self="override"
另一种选择,可能比覆盖default-deploy
<id>
插件的执行更冗长且更不深奥。
...
<execution>
<id>default-deploy</id>
<configuration>
<skip>true</skip>
</configuration>
</execution>
...
这不会被附加的<executions>
.
另外的选择
正如@yegor256 所指出的,但在附加配置中明确声明要“重置”从插件<skip>false</skip>
继承的。<skip>
HTH。