我对Maven很陌生。。。
我想做的是在部署阶段跳过maven部署插件,同时用我自己的插件替换它(即,我正在部署到非存储库位置)。
我意识到我可以通过多种其他方式做到这一点,但老板希望能够运行:
mvn部署
要获得我当前解决方案的结果,即禁用maven部署插件(似乎禁用了整个部署阶段),并从命令行手动指定自定义上传目标。
我目前未能成功完成我的任务:
<executions>
<execution>
<phase>deploy</phase>
</execution>
</executions>
在包含我的插件规范的build/plugins/plugin部分,因为部署阶段被跳过了:
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
谢谢!
禁用maven部署插件(似乎正在禁用整个部署阶段)
这是不正确的。禁用maven-deploy-plugin
不会禁用整个部署阶段。这是应该做的(看起来你已经在做了):
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
尝试这个(未经测试的)替代方案来禁用标准部署插件:
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
我想在@yegor256的答案基础上做一点。。。8年零4个月后!
我发现自己在这里陷入了一些遗留的Maven配置的杂草中,这些配置充满了漏洞。从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>
我知道这些执行将被附加到绑定到deploy
阶段的default-deploy
,并在日志中观察到了这种行为。default-deploy
将运行,上载一个空的war文件,然后deploy-war
将运行,上传并覆盖第一个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>
状态为"0";重置";从插件继承的CCD_ 23。
HTH。