我希望在 @yegor256 的回答上进一步完善... 8年4个月后!
我发现自己陷入了一些遗留的Maven配置细节中,这些细节充满了
cruft。尽管现在和当时的活跃开发之间隔了几年时间,但出于Maven的思维方式,我正在重新熟悉Maven生命周期。
简而言之...
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>
我知道这些执行将附加到绑定到“deploy”阶段的“default-deploy”中,并在日志中观察到了这种行为。默认部署将运行,上传一个空的war文件,然后“deploy-war”将运行,上传并覆盖第一个war文件。
有几个选项可用。
“跳过”和“combine.self =“override””(我的首选)
如所示,使用“”作为“”选项是可行的。它比将“”设置为“none”更安全、更便携。
但是,它将被其他执行继承(当然是按照所示的方式)。为了防止这种情况,
您必须明确告诉您的其他配置不要继承。
...
...
<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"
更冗长且不那么神秘的选项是覆盖插件的<id>
执行的default-deploy
。
...
<execution>
<id>default-deploy</id>
<configuration>
<skip>true</skip>
</configuration>
</execution>
...
这将不会被额外的<executions>
继承。
另一个选项
正如@yegor256所指出的那样,但是在额外的配置中明确声明<skip>false</skip>
以“重置”插件继承的<skip>
。
希望这有帮助。