當我們在使用 Maven 的 maven-war-plugin 建置 war 專案時常會發現,
如果有使用一些 javascript/css 最小化 (minify) 的 plugin,
例如 minify-maven-plugin,
minify-maven-plugin 會先執行把 js/css 檔做最小化,
然後 maven-war-plugin 會在 package phase 時從專案把未被最小化的 source code 放到
輸出資料夾中 (包括 war 檔),此時未被最小化的 source code
會把己被 minify-maven-plugin 最小化的檔案給覆蓋掉,
造成最後輸出資料夾、war 檔裡的檔案沒有成功被最小化。
以下分享一個解決的方法,
可以使用 minify-maven-plugin 的 <webappTargetDir> 設定
把最小化過的檔案放在另一個資料夾下,
例如: ${basedir}/target/minify (等同 ${project.build.directory}/minify)
資料夾中 ("minify" 資料夾名可自行決定),
<webappTargetDir>${project.build.directory}/minify</webappTargetDir>
然後再使用 maven-war-plugin 的 <webResource> 設定將
${basedir}/target/minify 資料夾中的
最小化檔案放回至專案輸出資料夾中
(也包括 war 檔裡)
<webResource> <directory>${project.build.directory}/minify</directory> </webResource>
如以下範例:
<plugin> <groupId>com.samaxes.maven</groupId> <artifactId>minify-maven-plugin</artifactId> <version>1.7.6</version> <executions> <execution> <id>default-minify</id> <configuration> <skipMerge>true</skipMerge> <nosuffix>true</nosuffix> <webappSourceDir>${basedir}/WebContent</webappSourceDir> <webappTargetDir>${project.build.directory}/minify</webappTargetDir> <cssSourceDir>./</cssSourceDir> <cssSourceIncludes> <cssSourceInclude>**/*.css</cssSourceInclude> </cssSourceIncludes> <cssSourceExcludes> <cssSourceExclude>**/*.min.css</cssSourceExclude> </cssSourceExcludes> <jsSourceDir>./</jsSourceDir> <jsSourceIncludes> <jsSourceInclude>**/*.js</jsSourceInclude> </jsSourceIncludes> <jsSourceExcludes> <jsSourceExclude>**/*.min.js</jsSourceExclude> <jsSourceExclude>**/node_modules/**/*.js</jsSourceExclude> <jsSourceExclude>**/webpack.config.js</jsSourceExclude> </jsSourceExcludes> <jsEngine>CLOSURE</jsEngine> </configuration> <phase>prepare-package</phase> <goals> <goal>minify</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <rules> <requireJavaVersion> <version>11</version> </requireJavaVersion> </rules> <source>11</source> <target>11</target> <release>11</release> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.1</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> <webResources> <webResource> <directory>${project.build.directory}/minify</directory> </webResource> </webResources> <archive> <addMavenDescriptor>false</addMavenDescriptor> </archive> </configuration> </plugin>
參考:
沒有留言 :
張貼留言