我正在尝试设置YUI压缩器,这样每次我构建一个部署的战争时,它都会缩小我的JS并将其转换为cachebusting。我已经设法得到它所以缩小的文件可用maven版本作为后缀,但原始文件仍然存在,加上我每次构建时都需要更新所有hrefs(并且本地我仍然希望使用原件)。任何人都可以建议如何解决这个问题?
这是我对插件的看法:
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<excludes>
<exclude>**/farbtastic/*</exclude>
<exclude>**/jquery.js</exclude>
<exclude>**/*.css</exclude>
</excludes>
<suffix>.${version}</suffix>
</configuration>
<executions>
<execution>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
</plugin>
答案 0 :(得分:4)
版本强>
1.1很老了。我们使用1.3.2
在本地我仍然想要使用原件
您应该使用profiles。您应该有两个配置文件(或可能更多)。
这是我们实施的并且在很长一段时间内都运行良好:请尝试这种方式(注意 - 请参阅 war插件中的内容,下面,这非常重要。你可能会需要更改最小化的 targetPath :
<profile>
<id>Production</id>
.......
.......
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
<configuration>
<nosuffix>true</nosuffix>
<encoding>UTF-8</encoding>
<!-- Show warnings decided on value of variable set in each profile -->
<jswarn>${yuiCompression.warn}</jswarn>
<webappDirectory>${project.build.directory}/minimized</webappDirectory>
<excludes>
<exclude>**/farbtastic/*</exclude>
<exclude>**/jquery.js</exclude>
<exclude>**/*.css</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<argLine>-Xmx1024m</argLine>
<dependentWarExcludes>....</dependentWarExcludes>
<warSourceExcludes>....</warSourceExcludes>
<packagingExcludes>....</packagingExcludes>
<packagingExcludes>....</packagingExcludes>
<webResources>
<resource>
<directory>${project.build.directory}/minimized</directory>
<targetPath>/</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
让我知道它是否有效。
想要文件版本号并让hrefs更新指向最新版本的问题
我想你的意思是通过版本控制缓存控制(基本上是为了确保在发布时始终加载新的js / css?)。这个插件不会这样做。您的代码将如何知道要使用哪个版本?
我们使用自定义Tag lib实现了这个:之后我们的Js / Css声明如下:
<custom:ScriptTag src="/js/xyz.js"></custom:ScriptTag>
<custom:CssTag rel="stylesheet" type="text/css" href="/style/someStyle.css"/>
编译/渲染的jsp看起来像这样:
<script type='text/javascript' src='/js/4112-13178/xyz.js' ></script>
<link type='text/css' href='/style/4112-13178/someStyle.css' rel='stylesheet' />
4112-13178 之间是release-svnversion。
一旦引用了这个url重写过滤器(基于Tuckey或Apache mod_rewrite,如果你在前面使用apache),请将其重写为:
<script type='text/javascript' src='/js/xyz.js' ></script>
当浏览器向服务器请求时。
解决方案2 - 版本控制(使用YUI插件但没有URLRewrite)
此解决方案的优点是您不需要重写网址,但仍需要自定义标记库。