我正在尝试为部署做好准备,因此我想将正确的配置文件复制到WEB-INF/classes/
,然后将所有内容打包到WAR文件中进行部署或开发。
最后,我想在每次调用
时执行部署任务mvn glcoud:deploy
- 当我需要部署配置文件时 - 以及在我的项目目录中执行其他任何操作时的开发任务。
目前我尚未确定我将如何做到这一点,但首先我尝试执行这样一个“虚拟任务”。不幸的是它没有用。
这是我在pom.xml
中配置的个人资料:
<profile>
<id>default-profile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<configuration>
<target>
<echo message="Hello World!"/>
<copy file="src/main/resource/x.xml" todir="src/main" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
应该{{1}}“Hello World!”并将 x.xml 文件从A复制到B.我决定在echo
阶段执行此操作,这意味着
compile
实际上应该足以让mvn clean compile
执行但是......如果有效的话,我不会在这里。
问题:有人知道为什么这不会被执行吗?
正如评论中所述,我可以/应该从target
删除pluginManagement
。但是,这会给我一个错误说:
build
我根据问题“How to solve “Plugin execution not covered by lifecycle configuration” for Spring Data Maven Builds”的回答添加了Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-antrun-plugin:1.8:run (execution: compile, phase: compile)
。
下面的解决方案是提供相同的“插件执行未被生命周期配置覆盖”错误
pluginManagement
我看到同样的事情:
<profile>
<id>default-profile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<!-- -->
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
答案 0 :(得分:2)
为了让m2e满意并且能够满足您的要求,请尝试以下方法:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<configuration>
<target>
<echo message="Hello World!"/>
<copy file="src/main/resource/x.xml" todir="src/main" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
</plugin>
</plugins>
</build>
请注意额外的plugins
部分,它基本上只是重复插件的artifactId
。
这里发生了什么:
pluginManagement
部分我们告诉Maven:每当构建(通过POM配置或命令行执行)需要执行此插件时,默认情况下应用此版本并且此配置执行plugins
部分,我们最终确实定义了我们的构建,告诉Maven将此插件添加到其构建计划中。无需指定版本,配置或执行,因为我们已将它们定义到pluginManagement
(即插件管理),这将作为默认配置/行为应用。有关插件和插件管理之间区别的更多详细信息,请查看reference post on SO: Maven: what is pluginManagement。
进一步注意相关phase
的执行:prepare-package
阶段比({1}}更多(语义正确,维护友好)选择。查看official Build Lifecycle phases list了解更多详情。关于compile
:
在实际包装之前执行准备包装所需的任何操作。
<强>更新强>
看来不仅如上所述prepare-package
阶段是更好的选择,而且在这种情况下,使m2e插件完全开心也是正确的阶段。
答案 1 :(得分:1)
请参阅POM Reference, Plugin Management:
<强> pluginManagement 强>
但是,这只配置了子节点中plugins元素中实际引用的插件。
这意味着在<pluginManagement>
中声明一个插件只是故事的一半。您还必须在<build>/<plugins>
部分中声明它,以实际执行其目标。
在你的情况下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</plugin>
</plugins>
</build>