使用 maven、spring、freemarker 等帮助设置 YUI Compressor 以适应不同的环境(测试/开发/生产)
Posted
技术标签:
【中文标题】使用 maven、spring、freemarker 等帮助设置 YUI Compressor 以适应不同的环境(测试/开发/生产)【英文标题】:Help setting up YUI Compressor with maven, spring, freemarker etc. for different environments (test/development/production) 【发布时间】:2011-05-24 22:39:58 【问题描述】:我几乎已经将我的项目设置为使用普通 javascript 文件或不同环境的最小版本,但有一件事我无法弄清楚 - 至少不优雅。
我已将项目的 Maven POM 设置为使用 YUI 压缩器:
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<suffix>.min</suffix>
</configuration>
<executions>
<execution>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
</plugin>
这没问题。
我还创建了一个 freemarker 宏来包含各种 css 和 javascript 文件...如果我们想使用“min”版本,它会在其中添加后缀:
<#macro cssAndJavaScript public useMin>
<#assign suffix = "" />
<#if useMin>
<#assign suffix = ".min" />
</#if>
<#if public>
<link rel="stylesheet" type="text/css" href="$base/css/public/base$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/public/webpageLayout$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/public/forms$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/public/publicWebpages$suffix.css" media="screen, projection" />
<link rel="stylesheet" type="text/css" href="$base/css/public/login$suffix.css" media="screen, projection" />
<#else>
<link rel="stylesheet" type="text/css" href="$base/css/ui-lightness/jquery-ui-1.8.6.custom$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/jcrop/jquery.jcrop$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/application/base$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/application/webpageLayout$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/application/forms$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/application/entityListing$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/application/entityView$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/application/questions$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/application/categoryQuestions$suffix.css" media="screen, projection"/>
<link rel="stylesheet" type="text/css" href="$base/css/application/miniScoreCard$suffix.css" media="screen, projection"/>
</#if>
<script src="$base/js/jquery/jquery-1.4.2$suffix.js"></script>
<script src="$base/js/jquery/jquery-ui-1.8.6.custom$suffix.js"></script>
<script src="$base/js/jquery/jquery.tmpl$suffix.js"></script>
<script src="$base/js/jquery/jquery.jcrop$suffix.js"></script>
<script src="$base/js/json/json2$suffix.js"></script>
<script src="$base/js/jwplayer/jwplayer$suffix.js"></script>
<script src="$base/js/core$suffix.js"></script>
</#macro>
如果我在测试环境或生产环境中,我现在唯一的问题是让 Spring 或 Maven 为我在我的 freemarker 脚本中添加“true/false”(或者我猜它也可以设置后缀)。你们是如何处理这个问题的?老实说,当我部署我的应用程序时,我不想做任何手动捏造。我只想告诉 maven,“使用我的生产环境”,它可以工作。
【问题讨论】:
【参考方案1】:我不确定它如何与 FreeMarker 一起使用,但使用 Velocity 模板引擎,您可以在模型中配置您希望始终显示的某些属性。因此,您需要将 FreeMarker/Velocity 配置 bean 与您的自定义属性列表联系起来,其中 suffix
的值可能来自存储在使用 PropertyPlaceholderConfigurer 访问的属性文件中的值。
因此,您可以让生产属性文件具有suffix = min
,而其他文件的属性环境具有suffix =
。
至于在 Maven 的不同环境中使用不同的属性,您可以根据运行时参数在构建中将 Maven 配置为 filter the resources,即 production
配置文件可以加载与默认 @987654327 不同的一组过滤器值@。
【讨论】:
以上是关于使用 maven、spring、freemarker 等帮助设置 YUI Compressor 以适应不同的环境(测试/开发/生产)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Maven 中使用模板代码生成器(例如 freemarker)?
java spring boot- freemarker 配置 yml使用流程
spring mvc freemarker 怎么让指定的控制器不适用freemarker
Spring Boot入门第二天:一个基于Spring Boot的Web应用,使用了Spring Data JPA和Freemarker。