0

我几乎完成了将我的项目设置为使用普通 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 脚本中放置“真/假”(或者我猜它也可以设置后缀)。你们是如何处理这个问题的?老实说,当我部署我的应用程序时,我不想做任何手动捏造。我只想告诉 maven,“使用我的生产环境”,它可以工作。

4

1 回答 1

1

我不确定它如何与 FreeMarker 一起使用,但使用 Velocity 模板引擎,您可以在模型中配置您希望始终出现的某些属性。因此,您可以将 FreeMarker/Velocity 配置 bean 与您的自定义属性列表联系起来,其中的值suffix可能来自存储在使用PropertyPlaceholderConfigurer访问的属性文件中的值。

因此,您可以拥有生产属性文件suffix = min,而其他文件的属性环境拥有suffix =

至于在 Maven 的不同环境中使用不同的属性,您可以配置 Maven 以根据运行时参数过滤构建中的资源production,即配置文件可以加载与默认值不同的一组过滤器值<profile>

于 2011-04-29T19:07:23.790 回答