Maven在“package”目标期间复制webapp资源后如何做某事?

时间:2011-12-03 22:24:52

标签: java maven build war lifecycle

在Maven将webapp资源复制到package目标内的war目录后,我该怎么办?我想在将webapp资源复制到目标的war目录之后做一些事情,但就在它最终将所有内容存档到WAR文件之前。

3 个答案:

答案 0 :(得分:9)

您遇到问题的原因是因为复制webapp资源是由war plugin完成的,它与构建战争的呼吸相同。它不是一个不同的生命周期阶段,甚至是同一阶段的两个不同的行动。它是war:war goal的所有部分。

但是有一种解决方法。如果您将war:exploded绑定到早期阶段,例如prepare-package,那么它将构建您的爆炸式网络应用程序,然后您可以在此之后添加一些内容来修改为展开目录构建的文件。然后war:war将打包修改后的展开目录。 (对于较新版本的war插件,我相信您需要设置useCache属性才能获得所需的行为,尽管这似乎不是真正的原因,但要小心。)

答案 1 :(得分:7)

我只需要做同样的事情所以这里是egervari的一个例子来展示Ryan Stewart所说的话。

(这使用YUI Compressor Maven Mojo自动缩小js文件。)

        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.1.1</version>
                    <configuration>
                        <warName>${warName}</warName>
                        <useCache>true</useCache>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>exploded</goal>
                            </goals>
                      </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>yuicompressor-maven-plugin</artifactId>
                    <version>1.1</version>
                    <executions>
                        <execution>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>compress</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <excludes>
                            <exclude>**/*.min.js</exclude>
                            <exclude>**/*.properties</exclude>
                        </excludes>
                        <nosuffix>true</nosuffix>
                    </configuration>
                </plugin>           
            </plugins>
        </build>

答案 2 :(得分:-1)

如构建lifecycle

中所述
  

prepare-package 执行准备包所需的任何操作   在实际包装之前。这通常导致打开包装,   处理版的包。 (Maven 2.1及以上)

     

获取已编译的代码并将其打包为可分发的格式,例如   JAR。

您可能想要根据您的pom执行方式将您的目标绑定到这些目标之一。

我没有尝试过这个,因此无法说出哪一个有权威。