2014-09-19 66 views
0

我使用Maven yui壓縮程序插件和Maven一個jar插件來創建一個容器js和css資源的jar文件。看起來,雖然,我的壓縮的CSS文件總是「一個編譯後面」,這意味着我必須編譯應用程序兩次,以接受一個CSS更改。這裏是我的構建POM的部分插件Yui壓縮器文件在Jar包裝之前未刷新

 <!-- Coffee --> 
     <plugin> 
      <groupId>com.github.iron9light</groupId> 
      <artifactId>coffeescript-maven-plugin</artifactId> 
      <version>1.1.2</version> 
      <configuration> 
       <srcDir>src/main/resources</srcDir> 
       <outputDir>src/main/resources</outputDir> 
       <bare>false</bare> 
       <modifiedOnly>false</modifiedOnly> 
       <allowedDelete>true</allowedDelete> 
      </configuration> 
      <executions> 
       <execution> 
        <id>coffeescript</id> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

     <!-- Sass --> 
     <plugin> 
      <groupId>org.jasig.maven</groupId> 
      <artifactId>sass-maven-plugin</artifactId> 
      <version>1.1.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>update-stylesheets</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <sassSourceDirectory>src/main/resources</sassSourceDirectory> 
       <destination>src/main/resources</destination> 
      </configuration> 
     </plugin> 

     <!-- YUI Compressor --> 
     <plugin> 
      <groupId>net.alchim31.maven</groupId> 
      <artifactId>yuicompressor-maven-plugin</artifactId> 
      <version>1.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compress</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <excludes> 
        <exclude>**/*.min.js</exclude> 
        <exclude>**/*.min.css</exclude> 
       </excludes> 
       <suffix>.min</suffix> 
       <outputDirectory>src/main/resources</outputDirectory> 
      </configuration> 
     </plugin> 

     <!-- Compiler --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 

     <!-- Jar --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>com.example.application.web.JettyStarter</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 

     <!-- One Jar --> 
     <plugin> 
      <groupId>org.dstovall</groupId> 
      <artifactId>onejar-maven-plugin</artifactId> 
      <version>1.4.4</version> 
      <executions> 
       <execution> 
        <configuration> 
         <onejarVersion>0.97</onejarVersion> 
         <classifier>onejar</classifier> 
        </configuration> 
        <goals> 
         <goal>one-jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

當我檢查我的源代碼樹,我看到過壓縮CSS是存在的,但它不是在瓶子裏。我想比較一下,在單瓶包裝之前將文件「沖洗」出來。有沒有人見過這個?

例子:我已將此添加的style.css

.clear-both { 
    clear: both; 
} 

而在style.min.css源樹

.clear-both{clear:both;} 

但是,當我要求這個文件在服務器:

GET css/style.min.css 

該行不存在。

難道這涉及到與資源插件插件執行的順序:

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ MyApp --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] Copying 661 resources 
[INFO] 
[INFO] --- yuicompressor-maven-plugin:1.1:compress (default) @ MyApp --- 
... 
+0

我已經更新了答案排序,但它可以得到改善。什麼都出現在您的src/main/resources目錄中?它只有.coffee腳本和saas源文件嗎? – coderplus 2014-09-21 04:21:58

+0

好的問題,是的,關鍵是要把他們放在流程來源階段。我會看看project.build。目錄也是如此,謝謝你的支持。 – 2014-09-21 18:21:38

回答

1

是的,這是由於maven-resources-pluginyuicompressor-maven-plugin之前執行的事實,因此您的縮小文件未被複制到最終的jar文件中。

重新排列階段將幫助您解決這個問題,但解決此問題的最佳方法是避免在源代碼樹中生成縮小/壓縮/編譯文件。這些文件不應該是源代碼樹的一部分,但應該生成到您的版本的輸出目錄中。使用Maven的${project.build.directory}(目標目錄)進行各種操作和處理。這也將確保所有生成的文件總是在Maven構建期間清理(mvn clean install)

看看下面的構建片段。我已經在必要時加入了評論。這段代碼是基於所有的咖啡腳本(.coffee文件),saas模板(.scss文件),其他css(未壓縮的.css文件),js(未壓縮的.js文件)和其他文件(比如圖像等)都存在於src/main/resources中。該片段只會封裝縮小的js和css,而未壓縮的js/css將不會打包到jar中。

如果你想測試這個,在你用這個代碼執行任何maven構建之前,先從src \ main \ resources中刪除所有生成的css文件,js文件和縮小文件。

<build> 
<resources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <!-- removing coffee scripts, saas templates, js and css from the final 
      output,we will only allow compressed files to go into the final jar 
      maven-resources-plugin:resources will respect these exclusions --> 
     <excludes> 
      <exclude>**/**.coffee</exclude> 
      <exclude>**/**.scss</exclude> 
      <exclude>**/**.css</exclude> 
      <exclude>**/**.js</exclude> 
     </excludes> 
    </resource> 
</resources> 
<plugins> 
    <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <groupId>org.apache.maven.plugins</groupId> 
     <version>2.6</version> 
     <executions> 
      <!-- copy uncompressed css and js to a staging directory for compressing --> 
      <execution> 
       <id>copy-uncompressed-css-and-js</id> 
       <phase>process-resources</phase> 
       <goals> 
        <goal>copy-resources</goal> 
       </goals> 
       <configuration> 
        <resources> 
         <resource> 
          <directory>src/main/resources</directory> 
          <includes> 
           <include>**/*.js</include> 
           <include>**/*.css</include> 
          </includes> 
         </resource> 
        </resources> 
        <outputDirectory>${project.build.directory}/uncompressed-css-and-js</outputDirectory> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
    <!-- Coffee --> 
    <!-- compiling coffee scripts and generating the uncompressed js files 
     into a staging directory for compressing --> 
    <plugin> 
     <groupId>com.github.iron9light</groupId> 
     <artifactId>coffeescript-maven-plugin</artifactId> 
     <version>1.1.2</version> 
     <configuration> 
      <srcDir>src/main/resources/coffee</srcDir> 
      <outputDir>${project.build.directory}/uncompressed-css-and-js</outputDir> 
      <bare>false</bare> 
      <modifiedOnly>false</modifiedOnly> 
      <allowedDelete>true</allowedDelete> 
     </configuration> 
     <executions> 
      <execution> 
       <id>coffeescript</id> 
       <phase>compile</phase> 
       <goals> 
        <goal>compile</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
    <!-- Sass --> 
    <!-- compiling saas scripts and generating the uncompressed css files 
     into a staging directory for compressing --> 
    <plugin> 
     <groupId>org.jasig.maven</groupId> 
     <artifactId>sass-maven-plugin</artifactId> 
     <version>1.1.1</version> 
     <executions> 
      <execution> 
       <id>saas</id> 
       <phase>compile</phase> 
       <goals> 
        <goal>update-stylesheets</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <sassSourceDirectory>src/main/resources/saas</sassSourceDirectory> 
      <destination>${project.build.directory}/uncompressed-css-and-js</destination> 
     </configuration> 
    </plugin> 
    <!-- YUI Compressor --> 
    <!-- compressing all css/jss files in the staging directory and generating 
     the output in the target/classes folder(which will end up in the final jar --> 
    <plugin> 
     <groupId>net.alchim31.maven</groupId> 
     <artifactId>yuicompressor-maven-plugin</artifactId> 
     <version>1.1</version> 
     <executions> 
      <execution> 
       <id>compress</id> 
       <phase>process-classes</phase> 
       <goals> 
        <goal>compress</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <suffix>.min</suffix> 
      <sourceDirectory>${project.build.directory}/uncompressed-css-and-js</sourceDirectory> 
      <outputDirectory>${project.build.outputDirectory}</outputDirectory> 
     </configuration> 
    </plugin> 
</plugins> 

參考:看一看相在Maven default lifecycle

0

答案是把CoffeeScript的,無禮的話,和YUI壓縮的過程中源相

<phase>process-sources</phase>