如何让maven yuicompressor和tomcat插件玩得很好

时间:2011-12-01 12:28:05

标签: java javascript tomcat maven yui-compressor

我想压缩所有的javascript文件并将它们聚合在一起 使用YUICompressor,我看到有一个maven插件允许 我这样做。我大部分时间都在工作。

我也在使用Mojo tomcat插件。当我去跑步时 tomcat:运行目标,tomcat不读取目标的输出 目录(这是YUI压缩器放我的javascript文件的地方) - 而是,它从我的“src / main /中的实际源文件中读取 webapp / scripts“目录。当然,聚合的javascript文件 (all.js)不存在。

我有几个问题。

  1. 如何让tomcat插件读取目标的输出文件夹 yui压缩器插件创建了吗?

  2. 我是否每次都需要运行yui压缩器maven目标 在开发期间更新我的javascript文件?

  3. 有没有更好的方法来实现这一目标?从本质上讲,我的最终目标是 能够开发JavaScript并测试我的源文件 开发模式,但我想压缩和聚合文件和 在应用程序在生产中运行时使用all.js脚本 模式。

  4. 虽然Rails的人肯定已经想到了这一点,但这似乎也是如此 对Maven和Spring来说,这是一件非常重要的事情。

    如果能得到这个,我将不胜感激 正确运行。谢谢!

2 个答案:

答案 0 :(得分:1)

我正在调查这个问题并通过查看plugin documentation找到了我的答案。

  

mvn tomcat:run - 将当前项目作为动态Web应用程序运行   使用嵌入式Tomcat服务器。

这在实践中意味着在嵌入式tomcat运行时尚未达到包执行阶段。

回答 改为使用:

  

mvn tomcat:run-war - 将当前项目作为打包的Web运行   使用嵌入式Tomcat服务器的应用程序。

这允许maven构建包装WAR文件,因此允许 yuicompressor-maven-plugin 在嵌入式tomcat启动之前完成所需的操作。

答案 1 :(得分:-1)

至于每次都必须运行它,你应该将yui插件的运行附加到“generate-sources”执行阶段。

将以下内容添加到您的插件中(重要的部分是将其附加到生命周期的“阶段”元素):

  <plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <executions>
      <execution>
        <phase>generate-sources</phase>
        <goals>
          <goal>compress</goal>
        </goals>
      </execution>
    </executions>  
    <configuration>...</configuration>      
  </plugin>

这样,插件将在generate-sources阶段运行每个构建。因此,每当您更改已为其配置插件的Java脚本时,输出.js文件将在您运行以下内容时立即更新:

mvn compile
mvn test
mvn install
mvn package

等等。


以上确实会导致在生命周期的早期创建缩小(可能是聚合)的文件,但 tomcat:run 找不到它们!