Помогите настроить YUI Compressor с maven, spring, freemarker и т. Д. Для различных сред (тестирование / разработка / производство) - PullRequest
0 голосов
/ 14 декабря 2010

Я почти закончил настройку моего проекта для использования обычных файлов 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 поместили «true / false» (или, я думаю, он мог бы просто установить суффикс) в моем скрипте freemarker, если я нахожусь в тестовой или производственной среде. Как вы, ребята, справились с этой проблемой? Честно говоря, я не хочу делать суету вручную при развертывании своего приложения. Я просто хочу сказать maven: «Используйте мою производственную среду», и она работает.

1 Ответ

1 голос
/ 29 апреля 2011

Я не уверен, как он работает с FreeMarker, но с помощью шаблонизатора Velocity вы можете настроить некоторые свойства в модели, которые вы хотели бы видеть всегда.Поэтому вы должны подключить bean-компонент конфигурации FreeMarker / Velocity со своими списками пользовательских свойств, где значение suffix может быть получено из значения, сохраненного в файле свойств, доступ к которому осуществляется с помощью PropertyPlaceholderConfigurer .

Таким образом, у файла производственных свойств может быть suffix = min, а в среде свойств для других файлов suffix =.

Поскольку в Maven используются разные свойства для разных сред, вы можете настроить Maven на фильтрацию ресурсов в вашей сборке на основе аргументов времени выполнения, т. Е. Профиль production может загрузить другуюнабор значений фильтра, чем по умолчанию <profile>.

...