我可以修改Maven部署阶段,用我自己的插件替换Maven部署插件吗



我对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文件。

存在多种选择。

skipcombine.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。

相关内容

  • 没有找到相关文章

最新更新