我有一个使用<packaging>war</packaging>
的Maven pom。但实际上,我不想构建war文件,我只想要收集所有依赖的jar并创建一个完整的部署目录。
所以我正在运行war:exploded
目标来生成部署目录:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<configuration>
<webappDirectory>target/${env}/deploy</webappDirectory>
<archiveClasses>true</archiveClasses>
</configuration>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
</plugin>
麻烦的是,war文件仍然存在。是否有一种简单的方法让<packaging>war</packaging>
执行war:exploded
目标而不是战争:战争目标?
或者还有另一种简单的方法吗?
答案 0 :(得分:69)
解决方案非常简单。您需要覆盖war插件的默认执行以禁用它并添加您自己的执行(用于爆炸):
<pluginManagement>
<plugins>
<plugin><!-- don't pack the war -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<id>default-war</id>
<phase>none</phase>
</execution>
<execution>
<id>war-exploded</id>
<phase>package</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
答案 1 :(得分:42)
根据builtin lifecycle bindings关于战争包装的战争包装:war mojo被称为。
您可以调用之前的'prepare-package'阶段 - 所有操作都将执行,之后调用mojo war:爆炸
mvn prepare-package war:exploded
结果与你的相同,但没有创造战争。
答案 2 :(得分:9)
我想升级到@Michael Wyraz的答案,只是包含 install skip 设置,以防有人在多模块项目的顶层执行mvn clean install
构建,其中一个子模块是Web应用程序。
这就是内部战争模块:
<profiles>
<profile>
<id>war_explode</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>default-war</id>
<phase>none</phase>
</execution>
<execution>
<id>war-exploded</id>
<phase>package</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>default-install</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
</profiles>
没有安装跳过构建失败,因为它尝试将war安装到.m2文件夹中。错误消息如下所示:
[INFO] --- maven-install-plugin:2.4:install (default-install) @ *** ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-install) on project ***: The packaging for this project did not assign a file to the build artifact -> [Help 1]
使用此设置执行mvn clean install -P war_explode
(包含在名为 war_explode 的maven配置文件中),它可以毫无错误地完成构建。
答案 3 :(得分:6)
我能想到做你想做的事的唯一方法是设置使用pom包装(或创建custom packaging)并将所需的目标从战争包装绑定到生命周期的相关阶段。如果你去pom打包你可以使用在配置文件中定义war:war执行来允许你打包它,但是你需要使用build-helper-maven-plugin attach-artifact goal来附加战争pom。
注意这种方法如果你想使用任何其他特定于战争的处理,它可能会导致你的问题。
战争包装的生命周期绑定列在Introduction to The Build Lifecycle中(请参阅“默认生命周期绑定 - 打包ejb / ejb3 / jar / par / rar / war”部分。)
要将相关的插件执行绑定到pom包装,您将执行以下操作:
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>process-resources</id>
<phase>process-resources</phase>
<goals>
<goal>resources</goal>
</goal>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compile-plugin</artifactId>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goal>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>process-test-resources</id>
<phase>process-test-resources</phase>
<goals>
<goal>testResources</goal>
</goal>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goal>
</execution>
</executions>
</plugin>
<!-- package not wanted, install and deploy already defined for pom packaging-->
<!--define war:war execution in a profile in case it is needed-->
答案 4 :(得分:0)
据我所知(我还是maven的新手),这是不可能的。您可以跳过的唯一默认生命周期是“test”。为了进入部署,您必须打包。您可以在此处阅读有关默认生命周期执行顺序的所有内容:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference