YUI Compressor Maven插件在错误的时间执行,而tomcat插件不使用yui-compressor输出 [英] YUI Compressor Maven plugin executed at wrong time and tomcat plugin not using yui-compressor output
问题描述
我正在尝试使用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.
-
我的配置正确压缩和聚合JavaScript文件,但是如果我运行
mvn package
来制作war文件,maven将在复制之前压缩JavaScript文件。src / main / webapp
文件夹。这会覆盖所有压缩的css和JavaScript文件。我该如何解决这个问题?
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 thesrc/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屋!