使用 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)?

spring boot入门(web+freemarker)

java spring boot- freemarker 配置 yml使用流程

spring mvc freemarker 怎么让指定的控制器不适用freemarker

idea+springboot+freemarker热部署

Spring Boot入门第二天:一个基于Spring Boot的Web应用,使用了Spring Data JPA和Freemarker。