1. 程式人生 > >maven 常用外掛配置詳解

maven 常用外掛配置詳解

先將我用到的自定義變數貼過來,防止外掛中出現一些變數,大家不理解

Java程式碼   收藏程式碼
  1. <!-- 全域性屬性配置 -->  
  2. <properties>  
  3.     <project.build.name>tools</project.build.name>  
  4.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  5. </properties>  

project.build.name: 用來定義war包名稱 

project.build.sourceEncoding: 用來定義資原始檔的編碼格式 

下面開始講解常用的maven外掛配置 

一、編譯外掛
Java程式碼   收藏程式碼
  1. <!-- 編譯外掛 -->  
  2. <plugin>  
  3.     <groupId>org.apache.maven.plugins</groupId>  
  4.     <artifactId>maven-compiler-plugin</artifactId>  
  5.     <configuration>  
  6.         <source>1.6
    </source>  
  7.         <target>1.6</target>  
  8.         <encoding>${project.build.sourceEncoding}</encoding>  
  9.     </configuration>  
  10. </plugin>  

source:原始碼編譯版本; 
target:目標平臺編譯版本; 
encoding:字符集編碼。 

二、設定資原始檔的編碼方式
Java程式碼   收藏程式碼
  1. <!-- 設定資原始檔的編碼方式 -->  
  2. <plugin>  
  3.     <groupId>org.apache.maven.plugins</groupId>  
  4.     <artifactId>maven-resources-plugin</artifactId>  
  5.     <version>2.4.3</version>  
  6.     <executions>  
  7.         <execution>  
  8.             <phase>compile</phase>  
  9.         </execution>  
  10.     </executions>  
  11.     <configuration>  
  12.         <encoding>${project.build.sourceEncoding}</encoding>  
  13.     </configuration>  
  14. </plugin>  

xml、properties檔案都是資原始檔,編碼的時候遇到中文總要進行轉碼!用什麼編碼?UTF-8,那就記得強制<encoding>${project.build.sourceEncoding}</encoding>

三、自動拷貝jar包到target目錄
Java程式碼   收藏程式碼
  1. <!-- 依賴外掛 -->  
  2. <plugin>  
  3.     <groupId>org.apache.maven.plugins</groupId>  
  4.     <artifactId>maven-dependency-plugin</artifactId>  
  5.     <version>2.6</version>  
  6.     <executions>  
  7.         <execution>  
  8.             <id>copy-dependencies</id>  
  9.             <phase>compile</phase>  
  10.             <goals>  
  11.                 <goal>copy-dependencies</goal>  
  12.             </goals>  
  13.             <configuration>  
  14.                 <!-- ${project.build.directory}為Maven內建變數,預設為target -->  
  15.                 <outputDirectory>${project.build.directory}/lib</outputDirectory>  
  16.                 <!-- 表示是否不包含間接依賴的包 -->  
  17.                 <excludeTransitive>false</excludeTransitive>  
  18.                 <!-- 表示複製的jar檔案去掉版本資訊 -->  
  19.                 <stripVersion>true</stripVersion>  
  20.             </configuration>  
  21.         </execution>  
  22.     </executions>  
  23. </plugin>  


在部署war包時,需要將專案依賴的jar包,也打到war包中,因此就會用到上述外掛 

四、生成原始碼jar包
Java程式碼   收藏程式碼
  1. <!-- 原始碼打包外掛 -->  
  2. <plugin>  
  3.     <artifactId>maven-source-plugin</artifactId>  
  4.     <version>2.1</version>  
  5.     <configuration>  
  6.         <!-- <finalName>${project.build.name}</finalName> -->  
  7.         <attach>true</attach>  
  8.         <encoding>${project.build.sourceEncoding}</encoding>  
  9.     </configuration>  
  10.     <executions>  
  11.         <execution>  
  12.             <phase>compile</phase>  
  13.             <goals>  
  14.                 <goal>jar</goal>  
  15.             </goals>  
  16.         </execution>  
  17.     </executions>  
  18. </plugin>  

該外掛主要用於在打jar包時,把原始碼也打成jar包 

五、將專案打成jar包
Java程式碼   收藏程式碼
  1. <!-- jar包外掛 -->  
  2. <plugin>  
  3.     <groupId>org.apache.maven.plugins</groupId>  
  4.     <artifactId>maven-jar-plugin</artifactId>  
  5.     <version>2.4</version>  
  6.     <configuration>  
  7.         <archive>  
  8.             <manifest>  
  9.                 <!-- 告知 maven-jar-plugin新增一個 Class-Path元素到 MANIFEST.MF檔案,以及在Class-Path元素中包括所有依賴項 -->  
  10.                 <addClasspath>true</addClasspath>  
  11.                 <!-- 所有的依賴項應該位於 lib資料夾 -->  
  12.                 <classpathPrefix>lib/</classpathPrefix>  
  13.                 <!-- 當用戶使用 lib命令執行JAR檔案時,使用該元素定義將要執行的類名 -->  
  14.                 <mainClass>com.zhengtian.tools.service.phone.MobilePhoneTool</mainClass>  
  15.             </manifest>  
  16.         </archive>  
  17.     </configuration>  
  18. </plugin>  


在將專案打成jar包時,有時會需要將專案打成可以直接執行的jar包,因此就需要將專案依賴的jar包也打入jar包中,此時需要在Eclipse上安裝例外一個外掛,用來打可執行jar包,詳情見連結http://zheng12tian.iteye.com/blog/1765626

六、將專案打成war包
Java程式碼   收藏程式碼
  1. <!-- war外掛 -->  
  2. <plugin>  
  3.     <groupId>org.apache.maven.plugins</groupId>  
  4.     <artifactId>maven-war-plugin</artifactId>  
  5.     <version>2.1.1</version>  
  6.     <configuration>  
  7.         <!-- <warName>${project.build.name}</warName> -->  
  8.     </configuration>  
  9. </plugin>  

encoding:強制字符集編碼 
warName:war包名字——platform.war 
webappDirectory:產生war前,用於存放構建war包的目錄——target/platform。 
warSourceDirectory:我把web工程搞成了eclipse下的WTP型別。我不喜歡maven產生的webapp目錄,更喜歡WebContent! 

需要注意的是:
採用上述外掛部署專案的話,使用clean package tomcat:redeploy命令。使用該命令前,需要先啟動tomcat,實際上是為了讓tomcat啟動manager專案,實現動態部署 

此部署方式雖然也是動態部署的範疇,但是每次修改檔案後,需要手動再次重新部署,才會載入更改。 

如果想讓tomcat自動掃描專案的改動,自動載入,那麼需要將maven工程的java全部編譯的webapp目錄下,然後將jar包和資原始檔也打到webapp目錄。最後在$CATALINA_HOME/conf /Catalina/localhost中新增一個xml檔案,修改docbase為webapp目錄。 

Tomcat常用的部署方式介紹:http://blog.csdn.net/yangxueyong/article/details/6130065

配置描述:當你的pom檔案中把你的當前專案的packaging配置為war後,maven會使用該外掛將當前專案生成war檔案,但是有時候我們不想要war檔案,只想讓maven生成當前專案的網站目錄結構,尤其是在除錯的時候,因為生成war檔案的同時,會生成當前專案的網站目錄結構,這樣一來,浪費了打包的時間和磁碟的空間!

maven使用war外掛生成war檔案所用的目標(goal)為war,從幫助文件中可以看出,war外掛還有一個目標(goal)是exploded,即,只生成目錄結構,而不生成war檔案。

參見:http://maven.apache.org/plugins/maven-war-plugin/plugin-info.html

可以在當前目錄下直接使用mvn war:exploded,就能生成當前專案的網站目錄結構。

使用mvn war:exploded生成網站目錄結構的時候,war外掛會把src/main/webapp目錄下的內容全部copy到target/${finalName}目錄下,但是,有時候webapp裡的一些資源部需要copy,比如我會在src/main/webapp的js目錄下放很多jQuery的外掛,其中包括外掛的幫助文件;但是我可能只會用到其中一部分外掛。所以在生成網站目錄結構的時候,我根本不需要把src/main/webapp的js目錄下的所以檔案都copy到target/${finalName}目錄中,這時候就需要對exploded目標(goal)進行資源過濾了——不把沒用的資源copy到網站的目錄結構中去:

  1. <plugin>
  2.     <artifactId>maven-war-plugin</artifactId>
  3.     <configuration>
  4.         <warSourceExcludes>js/參考/**</warSourceExcludes>
  5.     </configuration>
  6. </plugin>

說明:上面的配置,使用了war外掛的warSourceExcludes引數,該引數是一個String型別,需要把被排除的路徑或檔案使用逗號(comma)間隔開。

參見:

1、http://www.wsria.com/archives/1335

2、http://maven.apache.org/plugins/maven-war-plugin/exploded-mojo.html#warSourceDirectory


七、在打包時,需要清空一些指定的目錄

配置描述:maven提供了很多有用外掛,如mvn clean使用到的maven-clean-plugin,mvn compile使用到的maven-compile-plugin等,這些外掛可以通過pom檔案繫結到maven三個生命週期(life-cycle)的各階段(phase)上,也可以在命令列(如Windows下的cmd)中單獨由mvn命令呼叫,如mvn clean,可以呼叫maven-clean-plugin的clean目標(goal)。對於繫結到各階段(phase)執行的外掛的引數(parameter)可以用<configuration>標籤(tag)配置,但是在該外掛在命令列下單獨由mvn命令呼叫,那麼這個引數該如何使用pom檔案配置呢?比如,在一個J2EE專案中,想使用mvn clean命令清除target裡的內容的同時,也清除tomcat/webapp下的相應目錄,該怎麼辦呢?這就需要在pom檔案中對外掛進行全域性配置了。

  1. <plugin>
  2.     <artifactId>maven-clean-plugin</artifactId>
  3.     <configuration>
  4.         <verbose>true</verbose>
  5.         <filesets>
  6.             <fileset>
  7.                 <directory>c:/a</directory>
  8.             </fileset>
  9.       </filesets>
  10.     </configuration>
  11. </plugin>

外掛的配置分為區域性配置和全域性配置,本文中對antrun和resource外掛的配置是區域性配置,對clean外掛的配置是全域性配置,能看出差別吧?

區域性配置的<configuration>標籤(tag)放在<execution>標籤(tag)裡邊,而全域性配置的<configuration>標籤(tag)則放在<plugin>標籤(tag)裡邊,因為全域性配置里根本就沒有<execution>標籤(tag),因為全域性配置針對的是該外掛的全部目標(goal)配置的!

本例中,刪除的是C:/a目錄,即,當用戶在該maven專案中執行mvn clean後,除了刪除clean外掛預設的project.build.directoryproject.build.outputDirectory,project.build.testOutputDirectory, 和 project.reporting.outputDirectory目錄外

還會刪除C:/a目錄。

注意,該配置僅針對本專案有效,即,使用者在當前專案下使用mvn clean時,會刪除C:/a目錄;當用戶在其他沒有如此配置clean外掛的maven專案中執行mvn clean時,不會刪除C:/a目錄。

設定fileset的目錄時候用到的<directory>標籤不能亂用,比如<dir>,否則maven沒法識別,因為maven使用pom設定外掛引數(parameter)的時候用的是設定java bean的方式,之所以用<directory>標籤,是因為在org.apache.maven.plugin.clean.Fileset.java中,Fileset類只有如下成員變數:

(參見:http://search.maven.org/remotecontent?filepath=org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1-source-release.zip)

  1. private File directory;  
  2. private String[] includes;  
  3. private String[] excludes;  
  4. privateboolean followSymlinks;  

相關閱讀:

1、Maven clean plugin - delete additional directories

八、利用tomcat-maven-plugin外掛將專案自動打包並部署到tomcat中
Java程式碼   收藏程式碼
  1.  <!-- tomcat外掛 -->  
  2.     <plugin>  
  3.         <groupId>org.codehaus.mojo</groupId>  
  4.         <artifactId>tomcat-maven-plugin</artifactId>  
  5.         <configuration>  
  6.             <server>tomcat6-manager</server>  
  7.             <path>/${project.build.name}</path>  
  8.             <url>http://localhost:8080/manager</url>  
  9.             <username>admin</username>  
  10.             <password>admin</password>  
  11.         </configuration>  
  12.         <executions>  
  13.             <execution>  
  14.