进行战争时,文件在Maven项目中被覆盖 [英] Files got overwritten in maven project when building a war
问题描述
我正在使用maven构建一个Web应用程序项目,并且包装设置为"war".我还使用YUI压缩程序插件来压缩webapp目录中的javascript代码.我已经这样设置了YUI压缩器:
I'm building a web application project using maven, and packaging is set to "war". I also use YUI compressor plugin to compress javascript codes in the webapp directory. I've set up the YUI compressor like this:
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.3.0</version>
<executions>
<execution>
<phase>process-resources</phase>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<exclude>**/ext-2.0/**/*.js</exclude>
<exclude>**/lang/*.js</exclude>
<exclude>**/javascripts/flot/*.js</exclude>
<exclude>**/javascripts/jqplot/*.js</exclude>
</excludes>
<nosuffix>true</nosuffix>
<force>true</force>
<jswarn>false</jswarn>
</configuration>
</plugin>
如果我这样做:mvn process-resources,则src/main/webapp将被复制到target/webapp-1.0/目录,并且Javacript被压缩.但是,当我运行mvn install时,所有压缩的javascript都会被覆盖,显然打包过程会在构建war文件之前一次从main/webapp复制内容.
If I do: mvn process-resources, src/main/webapp will get copied over to target/webapp-1.0/ directory, and javacripts are compressed. However, when I run mvn install, all the compressed javascripts are overwritten, apparently the packaging process copies the content from main/webapp one time before building the war file.
我该如何解决?
推荐答案
您已经注意到,直到war插件在打包阶段执行之前,/src/main/webapp
dir(aka warSourceDirectory)的内容才被复制到要打包的项目dir中.当war插件完成后,归档文件便已建立;修改这些资源为时已晚.如果要将要压缩的.js文件移到另一个目录(在/src/main/webapp
之外),则可以执行以下操作.
As you noticed, the /src/main/webapp
dir (aka warSourceDirectory) contents is not copied into the project dir for packaging until the war plugin executes during the package phase. When the war plugin completes the archive is already built; too late to modify those resources. If the .js files you want to compress were moved into another directory (outside of /src/main/webapp
) then you could do something like the below.
为了测试,我创建了一个${basedir}/src/play
目录,其中包含几个文件.我在示例中使用了resource
插件;您将用您需要的YUI压缩器插件配置替换该配置,只需将<webResource>
元素添加到您的war
插件配置中,如下所示;有关更多信息,请参见 war插件示例 .我的战争最终在我需要它们的地方添加了文件.
To test, I created a ${basedir}/src/play
directory with a couple of files in it. I used the resource
plugin for the example; you'd replace that config with the YUI compressor plugin config you needed and simply add the <webResource>
element to your war
plugin config as shown below; more info in the war plugin examples. My war ended up with the additional files right where I wanted them.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>process-resources</phase>
<goals><goal>copy-resources</goal></goals>
<configuration>
<outputDirectory>${project.build.directory}/tmpPlay</outputDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/play</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<id>default-war</id>
<configuration>
<webResources>
<resource>
<directory>${project.build.directory}/tmpPlay</directory>
<targetPath>WEB-INF/yourLocationHere</targetPath>
<includes>
<include>**/*</include>
</includes>
</resource>
</webResources>
</configuration>
</execution>
</executions>
</plugin>
这篇关于进行战争时,文件在Maven项目中被覆盖的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!