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

ege*_*ari 7 java lifecycle build war maven

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

Rya*_*art 9

你遇到问题的原因是因为webapp资源的复制是由war插件完成的,它与构建战争相同.它不是一个不同的生命周期阶段,甚至是同一阶段的两个不同的行动.这是战争的全部内容:战争目标.

但是有一个解决方法.如果你绑定war:爆炸到早期阶段,prepare-package那么它将构建你的爆炸webapp,然后你可以在那之后添加一些内容来修改为爆炸目录构建的文件.然后war:war将打包修改的展开目录.(对于较新版本的war插件,我相信你需要设置useCache属性以获得所需的行为,虽然这似乎并不是真正的用途,但要小心.)


Luk*_*uke 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>
Run Code Online (Sandbox Code Playgroud)

  • 我有同样的问题,但这对我不起作用,yui压缩过程确实在复制网络资源后开始,但之后再被战争重写:战争目标.我的解决方案是:<configuration> <warSourceExcludes>**/dojo/**,**/*.css </ warSourceExcludes> </ configuration> (2认同)

Rag*_*ram -1

正如构建生命周期中记录的那样

准备包 在实际打包之前执行准备包所需的任何操作。这通常会产生一个未打包、经过处理的包版本。(Maven 2.1及以上版本)

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

您可能希望将您的目标绑定到这些目标之一,具体取决于您的 pom 的执行方式。

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

  • 我已经尝试过,预打包发生在复制webapp资源之前,而打包发生在创建war存档之后,因此为时已晚。复制资源之后但制作 war 文件之前没有任何阶段。 (2认同)