YUI Compressor Maven插件在错误的时间执行,而tomcat插件不使用yui-compressor输出 [英] YUI Compressor Maven plugin executed at wrong time and tomcat plugin not using yui-compressor output

查看:152
本文介绍了YUI Compressor Maven插件在错误的时间执行,而tomcat插件不使用yui-compressor输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用YUI Compressor插件为maven压缩我的CSS和JavaScript,但我遇到了两个问题。

I am trying to use the YUI Compressor plugin for maven to compress my CSS and JavaScript, but I'm experiencing two problems.


  1. 我的配置正确压缩和聚合JavaScript文件,但是如果我运行 mvn package 来制作war文件,maven将在复制之前压缩JavaScript文件。 src / main / webapp 文件夹。这会覆盖所有压缩的css和JavaScript文件。我该如何解决这个问题?

  1. My configuration properly compresses and aggregates the JavaScript files, but if I run mvn package to make a war file, maven will compress the JavaScript files BEFORE it copies over the src/main/webapp folder. This overwrites all of the compressed css and JavaScript files. How can I fix this?

如何让tomcat maven插件使用压缩的JavaScript文件而不是我的中的文件src / main / webapp / scripts 文件夹?当我的应用程序尝试读取 all.js 时,它失败了,因为它位于 target / 目录中,不在我的 src / main / webapps 文件夹中。

How do I get the tomcat maven plugin to use the compressed JavaScript files rather than the ones in my src/main/webapp/scripts folder? When my application is trying to read all.js, it is failing because it is located in the target/ directory and not in my src/main/webapps folder.

    <!-- Tomcat -->
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>tomcat-maven-plugin</artifactId>
        <version>1.1</version>
        <configuration>
            <warFile>target/myapp-1.0.war</warFile>
        </configuration>
    </plugin>

    <!-- YUI Compressor -->
    <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>yuicompressor-maven-plugin</artifactId>
        <executions>
            <execution>
                <goals>
                    <goal>compress</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <excludes>
                <exclude>**/jwplayer.js</exclude>
                <exclude>**/audio-player-noswfobject.js</exclude>
                <exclude>**/audio-player-uncompressed.js</exclude>
                <exclude>**/audio-player.js</exclude>
                <exclude>**/jscharts.js</exclude>
                <exclude>**/jquery-ui-1.8.16.custom.min.js</exclude>
            </excludes>
            <nosuffix>true</nosuffix>
            <jswarn>false</jswarn>
            <force>false</force>
            <aggregations>
                <aggregation>
                    <removeIncluded>false</removeIncluded>
                    <insertNewLine>true</insertNewLine>
                    <output>${project.build.directory}/${project.build.finalName}/scripts/all.js</output>
                    <includes>
                        <include>**/json/json2.js</include>
                        <include>**/jwplayer/jwplayer.js</include>
                        <include>**/font/font.js</include>
                        <include>**/underscore/underscore.js</include>
                        <include>**/jquery/jquery-1.7.1.js</include>
                        <include>**/jquery/jquery-ui-1.8.16.custom.min.js</include>
                        <include>**/jquery/jquery.cookie.js</include>
                        <include>**/jquery/jquery.fancybox.js</include>
                        <include>**/jquery/jquery.highlight.js</include>
                        <include>**/jquery/jquery.jcrop.js</include>
                        <include>**/jquery/jquery.tmpl.js</include>
                        <include>**/jquery/farbtastic.js</include>
                        <include>**/jscharts/jscharts.js</include>

                        <include>**/myapp/homepage.js</include>
                    </includes>
                </aggregation>
            </aggregations>
        </configuration>
    </plugin>


或者我只是想实现我的目标错误道?

Or am I just going about my goal the wrong way?

这是打包战争时的maven输出。您可以看到,即使我在预打包阶段告诉 yui:compress 目标,它仍然会在复制资源之前发生,因为这发生在 package 阶段:

Here is the maven output when packaging the war. You can see that even if I tell the yui:compress goal to in the pre-package phase, it still occurs before the copying of the resources since this occurs in the package phase:

[INFO] ------------------------------------------------------------------------
[INFO] Building My App 1.0
[INFO] ------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/net/alchim31/maven/yuicompressor-maven-plugin/maven-metadata.xml
Downloading: http://snapshots.repository.codehaus.org/net/alchim31/maven/yuicompressor-maven-plugin/maven-metadata.xml
Downloading: http://download.java.net/maven/2/net/alchim31/maven/yuicompressor-maven-plugin/maven-metadata.xml
Downloading: http://oss.sonatype.org/content/groups/public/net/alchim31/maven/yuicompressor-maven-plugin/maven-metadata.xml
Downloaded: http://oss.sonatype.org/content/groups/public/net/alchim31/maven/yuicompressor-maven-plugin/maven-metadata.xml (442 B at 2.1 KB/sec)
Downloaded: http://repo1.maven.org/maven2/net/alchim31/maven/yuicompressor-maven-plugin/maven-metadata.xml (403 B at 0.9 KB/sec)
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ myapp ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 26 resources
[INFO] Copying 4 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ myapp ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default) @ myapp ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- aspectj-maven-plugin:1.3:compile (default) @ myapp ---
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ myapp ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 11 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ myapp ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- aspectj-maven-plugin:1.3:test-compile (default) @ myapp ---
[INFO] No modifications found skipping aspectJ compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.6:test (default-test) @ myapp ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- yuicompressor-maven-plugin:1.2:compress (default) @ myapp ---
[INFO] 960.css (9989b) -> 960.css (5897b)[59%]
[INFO] base.css (24210b) -> base.css (16437b)[67%]
[INFO] reset.css (2062b) -> reset.css (1096b)[53%]
[INFO] text.css (1270b) -> text.css (598b)[47%]
[INFO] tinymce.css (1994b) -> tinymce.css (1277b)[64%]
[INFO] jquery.fancybox-1.3.4.css (8852b) -> jquery.fancybox-1.3.4.css (6975b)[78%]
[INFO] farbtastic.css (1362b) -> farbtastic.css (478b)[35%]
[INFO] jquery.jcrop.css (748b) -> jquery.jcrop.css (582b)[77%]
[INFO] base.css (34567b) -> base.css (25034b)[72%]
[INFO] jquery-ui-1.8.11.custom.css (33994b) -> jquery-ui-1.8.11.custom.css (25351b)[74%]
.... (tons of javascript files)
[INFO] why.js (515b) -> why.js (354b)[68%]
[INFO] underscore.js (26960b) -> underscore.js (9472b)[35%]
[INFO] total input (1832512b) -> output (1198425b)[65%]
[INFO] generate aggregation : C:\Users\egervari\IdeaProjects\myapp-development\target\myapp-1.0\scripts\all.js
[INFO] all.js (564342b)
[INFO] nb warnings: 0, nb errors: 0
[INFO] 
[INFO] --- maven-war-plugin:2.1.1:war (default-war) @ myapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [myapp] in [C:\Users\egervari\IdeaProjects\myapp-development\target\myapp-1.0]
[INFO] Processing war project
[INFO] Copying webapp resources [C:\Users\egervari\IdeaProjects\myapp-development\src\main\webapp]

即使改变阶段确实有效,那么我还必须在 tomcat之前运行此压缩:运行

Even if changing the phase did work, then I would also have to get this compression to run before tomcat:run as well.

maven是错的你认为这份工作的工具?或者是maven / java只是没有重视javascript开发的鼻烟?为什么这么难?

Is maven just the wrong tool for the job you think? Or is maven/java just not up-to-snuff with heavy javascript development? Why is this so hard?

推荐答案

我遇到了类似的问题,我将阶段改为打包。希望这也可以帮助其他人。

I faced a similar issue and I changed my phase to package. Hopefully this will help someone else as well.

这很棘手。这与nosuffix配置选项有关。如果删除nosuffix选项,则缩小按预期工作。

This is tricky. This has to do with the nosuffix config option. If you remove the nosuffix option, the minification works as expected.

如果你真的必须有nosuffix,那么你需要将执行阶段改为package。

If you really have to have nosuffix then you need to change the execution phase to "package".

    <executions>
      <execution>
        <phase>package</phase>
          <goals>
    ......
    .....

任何阶段在prepare-resources之前不起作用,因为在构建战争时,它从原始源位置获取js,从而覆盖目标目录中的缩小的js(在准备资源阶段创建)。

Any phase before prepare-resources doesn't work because when the war is built, it picks up the js from the original source location and thereby overwrites the minified js (created during prepare-resources phase) in the target directory.

当你删除nosuffix时缩小是有效的,因为在打包阶段,文件名不同,所以没有覆盖文件,你会看到缩小的和目标目录中的非缩小js文件。

Minification works when you remove nosuffix because during package phase, the file names are different, so there is no over-writing of the files and you will see both the minified and non-minified js files in your target directory.

这篇关于YUI Compressor Maven插件在错误的时间执行,而tomcat插件不使用yui-compressor输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆