2014-10-20 42 views
4

我正在研究一個使用Maven構建過程的Java Web應用程序,並且有很多JavaScript。使用Maven配置文件在縮小/未壓縮的JS之間切換?

我想要做的基本上是有這個在我的JSP文件:

<c:choose> 
    <c:when test="PRODUCTION"> 
     <script type="text/javascript" src="/path/to/app.min.js"></script> 
    </c:when> 
    <c:otherwise> 
     <script type="text/javascript" src="/path/to/script1.js"></script> 
     <script type="text/javascript" src="/path/to/script2.js"></script> 
    </c:otherwise 
</c:choose> 

這是可以做到與Maven配置文件?

回答

5

看一看maven resource filtering。您可以使用它來用您的實際值覆蓋資源文件中的屬性。

1)使用保存環境名稱的屬性文件。說environment.properties它具有以下內容。

environment.name=${environment.name} 

現在使用下面的POM文件

<properties> 
    <environment.name>TEST</environment.name> 
</properties> 

<profiles> 
    <profile> 
     <id>PROD</id> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
     </activation> 
     <properties> 
      <environment.name>PROD</environment.name> 
     </properties> 
    </profile> 
</profiles> 

,並在你的POM

<resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
    </resource> 

指定資源篩選,如果您使用此配置文件運行構建,

mvn clean install -P PROD 

environment.properties將被處理以

environment.name=PROD 

,如果你不使用此配置文件

mvn clean install 

將被加工成

environment.name=TEST 

現在在運行時,讀取environment.name屬性environment.properties並根據屬性值使用相應的.js文件。

OR

2)如果你不想從特性文件讀取,你可以過濾JSP本身。

<properties> 
    <js.suffix></js.suffix> 
</properties> 

<profiles> 
    <profile> 
     <id>PROD</id> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
     </activation> 
     <properties> 
      <js.suffix>min.</js.suffix> 
     </properties> 
    </profile> 
</profiles> 

,並設置網絡資源過濾

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.5</version> 
      <configuration> 
       <webResources> 
        <resource> 
         <directory>src/main/webapp</directory> 
         <filtering>true</filtering> 
        </resource> 
       </webResources> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

,並添加一些這類在JSP

<script type="text/javascript" src="/path/to/app.${js.suffix}js"></script> 

(假設未壓縮的一個是app.js和壓縮一個是app.min.js)

2

我的解決方案有點不同。我使用了minify-maven-plugin,並且在開發過程中我使用它創建了一個合併但未縮小的app.js,當我在製作時,我使用它創建縮小文件。我將它們都命名爲app.js,因此我不必使用Maven更改我的JSP文件。

例如:

<!-- Resource minification --> 
<plugin> 
    <groupId>com.samaxes.maven</groupId> 
    <artifactId>minify-maven-plugin</artifactId> 
    <version>1.7.2</version> 
    <executions> 
    <!-- JavaScript --> 
    <execution> 
     <id>minify-js</id> 
      <phase>generate-sources</phase> 
     <configuration> 
     <charset>utf-8</charset> 
     <skipMerge>false</skipMerge> 
     <skipMinify>${javascript.skipMinify}</skipMinify> 
     <nosuffix>true</nosuffix> 
     <webappSourceDir>${project.basedir}/src/main/webapp</webappSourceDir> 
     <jsSourceDir>assets/js</jsSourceDir> 
     <jsSourceIncludes> 
      <jsSourceInclude>*.js</jsSourceInclude> 
     </jsSourceIncludes> 
     <jsFinalFile>app.js</jsFinalFile> 
     </configuration> 
     <goals> 
     <goal>minify</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

然後,我使用Maven型材切換${javascript.skipMinify}屬性,例如:

<profile> 
    <id>development</id> 
    <activation> 
    <activeByDefault>true</activeByDefault> 
    </activation> 
    <properties> 
    <javascript.skipMinify>true</javascript.skipMinify> 
    </properties> 
</profile> 
<profile> 
    <id>production</id> 
    <properties> 
    <javascript.skipMinify>false</javascript.skipMinify> 
    </properties> 
</profile> 
相關問題