2010-12-13 7 views
0

Ich bin fast fertig Einstellung meines Projekts, um normale Javascript-Dateien oder die Min-Versionen für verschiedene Umgebungen zu verwenden, aber es gibt eine Sache Ich kann nicht herausfinden - zumindest nicht elegant.Hilfe YUI Compressor mit Maven, Frühling, Freimarker usw. für verschiedene Umgebungen (Test/Entwicklung/Produktion)

Ich habe mein Projekt Maven POM eingerichtet, um die YUI Kompressor zu verwenden:

 <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> 

kein Problem funktioniert.

Ich habe auch ein Freemarker Makro auf verschiedene CSS und Javascript-Dateien enthalten ... und wenn wir „min“ Versionen verwenden möchten, wird es das Suffix in sie hinzufügen:

<#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> 

Mein einziges Problem jetzt bekommt Spring oder Maven, um "True/False" (oder ich denke, es könnte nur das Suffix setzen) in meinem Freemarker-Skript für mich, wenn ich in Testumgebung oder Produktionsumgebung bin. Wie habt ihr euch mit diesem Thema beschäftigt? Ehrlich gesagt möchte ich nicht manuell herumfummeln, wenn ich meine App bereitstelle. Ich möchte nur sagen, "Verwenden Sie meine Produktionsumgebung" und es funktioniert.

Antwort

1

Ich bin mir nicht sicher, wie es mit FreeMarker funktioniert, aber mit der Velocity-Vorlagen-Engine können Sie bestimmte Eigenschaften in dem Modell konfigurieren, das immer angezeigt werden soll. Sie würden daher die FreeMarker/Velocity-Config-Bean mit Ihren Listen von benutzerdefinierten Eigenschaften verbinden, wobei der Wert für suffix von einem Wert stammen könnte, der in einer Eigenschaftendatei gespeichert ist, auf die mit PropertyPlaceholderConfigurer zugegriffen wird.

Sie könnten also die Produktionseigenschaftendatei haben suffix = min, und die Eigenschaften Umgebung für andere Dateien haben suffix =.

Soweit unterschiedliche Eigenschaften für unterschiedliche Umgebungen mit Maven verwenden, können Sie Maven filter the resources in Ihrem Build konfigurieren, basierend auf Laufzeit Argumenten, das heißt ein production Profil <profile> einen anderen Satz von Filterwerten als der Standard laden kann.

Verwandte Themen