Maven插件:在打包之前修改资源

时间:2012-06-29 21:00:03

标签: java maven maven-plugin

我找不到满足我最小化javascript和css需求的maven插件,所以我开始创建自己的。但是,我似乎遇到了障碍。文件的最小化版本总是被war插件或其他东西覆盖。

我的文件结构是

src
   main
       java
       webapp
           assets
                 css
                   style1.css
                   style2.css
                   style3.css
                 js
                   script1.js
                   script2.js
                   script3.js

我的插件接受那些,最小化它们,并且(应该)在构建目录中替换它们。如何确保它们不会被覆盖?

2 个答案:

答案 0 :(得分:1)

您的插件将更改后的文件输出到哪里?我看到它的方式,它正在进行必要的更改(如果它工作),然后maven war插件将原始资源复制到它们上面。

也许你应该附上你的代码和pom.xml,以获得更好的答案。

编辑:

在查看了您的测试项目后,可以通过对pom.xml进行以下更改来解决问题:

diff --git a/pom.xml b/pom.xml
index 0fb6044..ee693f7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,9 +72,17 @@
                                <version>2.2</version>
                                <configuration>
                                        <webappDirectory>${basedir}/src/main/webapp</webappDirectory>
+                                       <warSourceExcludes>assets</warSourceExcludes>
+
                                        <failOnMissingWebXml>false</failOnMissingWebXml>
+                                       <webResources>
+                                               <resource>
+                                                       <!-- this is relative to the pom.xml directory -->
+                                                       <directory>${project.build.directory}/minified</directory>
+                                               </resource>
+                                       </webResources>
                                </configuration>
                        </plugin>
                </plugins>
        </build>
-</project>
\ No newline at end of file
+</project>

我还认为您修改的css文件被更改为src/main/webapp/assets目录,这是不正确的。这些文件只有在复制到目标目录下的相应目录后才能更改。

我已经分叉了您的存储库并向您发送了拉取请求。

答案 1 :(得分:1)

首先,我建议使用能够为您压缩和合并JS / CSS的http://alchim.sourceforge.net/yuicompressor-maven-plugin/compress-mojo.html

接下来,您需要确定哪个插件实际上覆盖了您的压缩文件以及发生的阶段。一旦你知道了这个阶段,你需要确保你的插件在另一个插件之后运行