2

我想压缩我所有的 javascript 文件并使用 YUICompressor 聚合它们,我看到有一个 maven 插件可以让我这样做。我让它大部分工作。

我也在使用 Mojo tomcat 插件。当我运行 tomcat:run 目标时,tomcat 不会从目标的输出目录中读取(这是 YUI 压缩器放置我的 javascript 文件的位置)-而是从我的“src/main/”中的实际源文件中读取webapp/脚本”目录。当然,聚合的 javascript 文件 (all.js) 不存在。

我有几个问题。

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

  2. 每次我想在开发期间更新我的 javascript 文件时,我是否必须运行 yui 压缩器 maven 目标?

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

虽然 Rails 的人肯定已经想到了这一点,但这似乎对 Maven 和 Spring 来说是一件不平凡的事情。

我将不胜感激有关如何使其正确运行的任何和所有帮助。谢谢!

4

2 回答 2

1

我只是在调查这个问题,并通过查看插件文档找到了答案。

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

这在实践中意味着当嵌入式 tomcat 运行时还没有到达包执行阶段。

答案是改用:

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

这允许 maven 构建尽可能地打包 WAR 文件,因此允许yuicompressor-maven-plugin在嵌入式 tomcat 启动之前完成它需要做的事情。

于 2012-08-03T12:04:20.537 回答
-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>

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

mvn compile
mvn test
mvn install
mvn package

等等。


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

于 2012-08-03T12:14:56.907 回答