我建立使用Maven Web应用程序项目,以及包装被设置为“战争”。 我也使用YUI压缩机的插件在webapp目录压缩JavaScript代码。 我已经设置了YUI压缩机是这样的:
<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工艺资源,源/主/ web应用程序将会被复制到目标/ webapp的-1.0 /目录下,javacripts被压缩。 然而,当我运行mvn安装,所有压缩JavaScript的被覆盖,显然是包装过程的副本构建WAR文件之前,从主/ web应用一次的内容。
我怎样才能解决这个问题?
正如你注意到的, /src/main/webapp
,直到在封装阶段的战争插件执行目录(又名warSourceDirectory)中的内容不会被复制到项目目录进行包装。 当战争结束插件存档已建成; 来不及修改这些资源。 如果你想压缩.js文件被移动到另一个目录(外/src/main/webapp
),那么你可以做类似的下面。
为了测试,我创建了一个${basedir}/src/play
目录,在这两个文件。 我使用的resource
插件的例子; 你会用您需要的,只是在添加YUI压缩机的插件配置是配置<webResource>
元素到你的war
插件的配置,如下图所示; 在更多信息战争插件的例子 。 我的战争结束了与其他文件身在何方,我想他们。
<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>
我觉得@ user944849的答案是正确的答案,正确答案的至少一个。 该归档的另一种方法是排除Maven的战争插件配置,如修改后的JavaScript目录:
<plugin>
<artifactId> maven-war-plugin </artifactId>
<configuration>
<warSourceExcludes>**/external/ dojo/**/*.js </warSourceExcludes>
</configuration>
</plugin>
这将告诉Maven的战争插件不会从排斥目录复制,但由于修改后的JavaScript目录已经存在,战争的文件仍然包含的JavaScript目录,但与修改,在这种情况下,压缩的JavaScript代码。
在执行指令,设定您的应用压缩和复制被安装阶段,这将有希望做的伎俩。 代码应该是这样的:
<executions>
<execution>
....
<phase>install</phase>
....
</execution>
<executions>
这里是我的解决方案,只需添加一个antrun插件,更新使用处理后的输出打包war文件,结合到封装阶段:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>package</id>
<phase>package</phase>
<configuration>
<target>
<zip basedir="${project.build.directory}/${project.build.finalName}"
destfile="${project.build.directory}/${project.build.finalName}.war"
update="true">
</zip>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>