1. 程式人生 > >常用maven外掛配置彙總

常用maven外掛配置彙總

最近接觸用maven達成jar包,但是發現好多配置不知道有啥作用,查出來都是外掛。Maven本質上是一個外掛框架,它的核心並不執行任何具體的構建任務,所有這些任務都交給外掛來完成,進一步說,每個任務對應了一個外掛目標(goal),每個外掛會有一個或者多個目標。

首先看下全域性變數配置,下面的外掛中會用到。:

<!-- 全域性屬性配置 -->  
<properties>  
    <project.build.name>tools</project.build.name>  
    <project.build.sourceEncoding
>
UTF-8</project.build.sourceEncoding> </properties>

一、編譯外掛

<!-- 編譯外掛 -->  
<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-compiler-plugin</artifactId>  
    <configuration>  
        <source>1.6</source
>
<target>1.6</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin>

source: 原始碼編譯版本;
target: 目標平臺編譯版本;
encoding: 字符集編碼。
二、設定資原始檔的編碼方式

<!-- 設定資原始檔的編碼方式 -->  
<plugin>  
    <groupId
>
org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <phase>compile</phase> </execution> </executions> <configuration> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin>

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

<!-- 依賴外掛 -->  
<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-dependency-plugin</artifactId>  
    <version>2.6</version>  
    <executions>  
        <execution>  
            <id>copy-dependencies</id>  
            <phase>compile</phase>  
            <goals>  
                <goal>copy-dependencies</goal>  
            </goals>  
            <configuration>  
                <!-- ${project.build.directory}為Maven內建變數,預設為target -->  
                <outputDirectory>${project.build.directory}/lib</outputDirectory>  
                <!-- 表示是否不包含間接依賴的包 -->  
                <excludeTransitive>false</excludeTransitive>  
                <!-- 表示複製的jar檔案去掉版本資訊 -->  
                <stripVersion>true</stripVersion>  
            </configuration>  
        </execution>  
    </executions>  
</plugin>  

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

<!-- 原始碼打包外掛 -->  
<plugin>  
    <artifactId>maven-source-plugin</artifactId>  
    <version>2.1</version>  
    <configuration>  
        <!-- <finalName>${project.build.name}</finalName> -->  
        <attach>true</attach>  
        <encoding>${project.build.sourceEncoding}</encoding>  
    </configuration>  
    <executions>  
        <execution>  
            <phase>compile</phase>  
            <goals>  
                <goal>jar</goal>  
            </goals>  
        </execution>  
    </executions>  
</plugin>  

該外掛主要用於在打jar包時,把原始碼也打成jar包
五、將專案打成jar包

<!-- jar包外掛 -->  
<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-jar-plugin</artifactId>  
    <version>2.4</version>  
    <configuration>  
        <archive>  
            <manifest>  
                <!-- 告知 maven-jar-plugin新增一個 Class-Path元素到 MANIFEST.MF檔案,以及在Class-Path元素中包括所有依賴項 -->  
                <addClasspath>true</addClasspath>  
                <!-- 所有的依賴項應該位於 lib資料夾 -->  
                <classpathPrefix>lib/</classpathPrefix>  
                <!-- 當用戶使用 lib命令執行JAR檔案時,使用該元素定義將要執行的類名 -->  
                <mainClass>com.zhengtian.tools.service.phone.MobilePhoneTool</mainClass>  
            </manifest>  
        </archive>  
    </configuration>  
</plugin>  

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

<!-- war外掛 -->  
<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-war-plugin</artifactId>  
    <version>2.1.1</version>  
    <configuration>  
        <!-- <warName>${project.build.name}</warName> -->  
    </configuration>  
</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檔案。

可以在當前目錄下直接使用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到網站的目錄結構中去:

<plugin>  
    <artifactId>maven-war-plugin</artifactId>  
    <configuration>  
        <warSourceExcludes>js/參考/**</warSourceExcludes>  
    </configuration>  
</plugin> 

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

七、在打包時,需要清空一些指定的目錄
配置描述: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檔案中對外掛進行全域性配置了。

<plugin>  
    <artifactId>maven-clean-plugin</artifactId>  
    <configuration>  
        <verbose>true</verbose>  
        <filesets>  
            <fileset>  
                <directory>c:/a</directory>  
            </fileset>  
      </filesets>  
    </configuration>  
</plugin>  

外掛的配置分為區域性配置和全域性配置,本文中對antrun和resource外掛的配置是區域性配置,對clean外掛的配置是全域性配置,能看出差別吧?
區域性配置的<configuration>標籤(tag)放在<execution>標籤(tag)裡邊,而全域性配置的<configuration>標籤(tag)則放在<plugin>標籤(tag)裡邊,因為全域性配置里根本就沒有<execution>標籤(tag),因為全域性配置針對的是該外掛的全部目標(goal)配置的!

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

還會刪除C:/a目錄。
這裡寫圖片描述

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

設定fileset的目錄時候用到的標籤不能亂用,比如

,否則maven沒法識別,因為maven使用pom設定外掛引數(parameter)的時候用的是設定java bean的方式,之所以用標籤,是因為在org.apache.maven.plugin.clean.Fileset.java中,Fileset類只有如下成員變數:
private File directory;  

private String[] includes;  

private String[] excludes;  

private boolean followSymlinks;  

八、利用tomcat-maven-plugin外掛將專案自動打包並部署到tomcat中

<!-- tomcat外掛 -->  
    <plugin>  
        <groupId>org.codehaus.mojo</groupId>  
        <artifactId>tomcat-maven-plugin</artifactId>  
        <configuration>  
            <server>tomcat6-manager</server>  
            <path>/${project.build.name}</path>  
            <url>http://localhost:8080/manager</url>  
            <username>admin</username>  
            <password>admin</password>  
        </configuration>  
        <executions>  
            <execution>  
                <phase>deploy</phase>  
                <goals>  
                    <goal>deploy</goal>  
                </goals>  
            </execution>  
        </executions>  
    </plugin>  
</plugins>  

path: 是指專案部署到tomcat後的專案名稱
url: 是指tomcat的manager訪問地址
server: 這個是tomcat服務名稱設定,需要配置maven的settings.xml檔案,在servers節點中手動配置server,如下所示:

<server>  
    <id>tomcat6-manager</id>  
    <username>admin</username>  
    <password>admin</password>  
</server>  

九、利用cargo-maven2-plugin外掛將專案自動打包並部署到tomcat中
配置描述:使用maven做web專案時,cargo外掛可以幫助你完成WAR包到伺服器的部署及伺服器的啟動和關閉等工作,方便,快速!

<plugin>  
    <groupId>org.codehaus.cargo</groupId>  
    <artifactId>cargo-maven2-plugin</artifactId>  
    <version>1.2.0</version>  
    <configuration>  
        <container>  
            <containerId>${server_name}</containerId>  
            <home>${server_home}</home>  
        </container>  
        <configuration>  
            <type>existing</type>  
            <home>${server_home}</home>  
            <properties>  
                <cargo.servlet.port>8088</cargo.servlet.port>  
            </properties>  
        </configuration>  
    </configuration>  
</plugin>  

注意,如果你的tomcat伺服器的埠使用的不是預設的8080(如本例中的8088),則需要使用cargo.servlet.port引數將cargo的監聽埠也配置到tomcat的那個監聽埠(如本例中的8088),否則使用mvn cargo:run啟動的伺服器會在120000毫秒(120秒)後自動關閉!
mvn cargo:start命令完成WAR包部署後,啟動伺服器,然後會將伺服器立即關掉;

mvn cargo:run命令完成WAR包部署後,啟動伺服器,直到你Ctrl+C將伺服器關掉;

mvn cargo:stop命令關閉伺服器。

<plugin>  
                <!-- 指定外掛名稱及版本號 -->  
                <groupId>org.codehaus.cargo</groupId>  
                <artifactId>cargo-maven2-plugin</artifactId>  
                <version>1.2.3</version>  
                <!-- 外掛的Tomcat6.x配置 -->  
                <configuration>  
                    <!-- 容器的配置 -->  
                    <container>  
                        <!-- 指定伺服器版本 -->  
                        <containerId>tomcat6x</containerId>  
                        <!-- 指定伺服器的安裝目錄 -->  
                        <home>E:\Program Files\tomcat-6.0.32</home>  
                    </container>  
                    <!-- 具體的配置 -->  
                    <configuration>  
                        <!-- 部署模式:existing、standalone等 -->  
                        <type>existing</type>  
                        <!-- Tomcat的位置,即catalina.home -->  
                        <home>E:\Program Files\tomcat-6.0.32</home>  
                        <!-- 配置屬性 -->  
                        <properties>  
                            <!-- 管理地址 -->  
                            <cargo.tomcat.manager.url>http://localhost:8080/manager</cargo.tomcat.manager.url>  
                            <!-- Tomcat使用者名稱 -->  
                            <cargo.remote.username>admin</cargo.remote.username>  
                            <!-- Tomcat密碼 -->  
                            <cargo.remote.password>admin</cargo.remote.password>  
                            <!-- <cargo.jvmargs> -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787 </cargo.jvmargs> -->  
                        </properties>  
                    </configuration>  
                </configuration>  
            </plugin>  

username和password: 是指tomcat的tomcat-users.xml檔案中配置的,檔案路徑為E:\Program Files\tomcat-6.0.32\conf\tomcat-users.xml,如下所示:

<role rolename="manager"/>   
<user password="admin" roles="manager" username="admin"/>   

十、有時候外掛檢查不通過,需要人為的忽略對有些外掛的檢查

<!-- 外掛管理 -->  
<pluginManagement>  
    <plugins>  
        <plugin>  
            <groupId>org.eclipse.m2e</groupId>  
            <artifactId>lifecycle-mapping</artifactId>  
            <version>1.0.0</version>  
            <configuration>  
                <lifecycleMappingMetadata>  
                    <pluginExecutions>  
                        <!-- 忽略2.0以上版本的maven-dependency-plugin的檢查 -->  
                        <pluginExecution>  
                            <pluginExecutionFilter>  
                                <groupId>org.apache.maven.plugins</groupId>  
                                <artifactId>maven-dependency-plugin</artifactId>  
                                <versionRange>[2.0,)</versionRange>  
                                <goals>  
                                    <goal>copy-dependencies</goal>  
                                </goals>  
                            </pluginExecutionFilter>  
                            <action>  
                                <ignore />  
                            </action>  
                        </pluginExecution>  
                    </pluginExecutions>  
                </lifecycleMappingMetadata>  
            </configuration>  
        </plugin>  
    </plugins>  
</pluginManagement>  

十一、maven-resources-plugin

配置描述:把web專案的輸出copy到tomcat的webapp下

<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-resources-plugin</artifactId>  
    <version>2.5</version>  
    <executions>  
        <execution>  
            <id>deploy-website</id>  
            <phase>package</phase>  
            <goals>  
                <goal>copy-resources</goal>  
            </goals>  
            <configuration>  
                <outputDirectory>${server_home}/webapps/${project.build.finalName}</outputDirectory>  
                <resources>  
                    <resource>  
                        <directory>${project.build.directory}/${project.build.finalName}</directory>  
                    </resource>  
                </resources>  
            </configuration>  
        </execution>  
    </executions>  
</plugin>  

十二、maven-antrun-plugin
配置描述:在maven中使用antrun呼叫bat檔案

(我這裡呼叫的是tomcat的startup.bat檔案,但是沒有成功啟動tomcat,提示說環境變數沒配置,可我雙擊執行startup.bat將就可以執行,奇怪了……)

(現在知道原因了:antrun執行的bat檔案,實際上是在basedirbattomcatstartup.bat調batbat{basedir}目錄下不存在!

解決方法:使用令一個bat檔案,如mystartup.bat執行startup.bat,注意在執行startup.bat之前,需要在mystartup.bat檔案中把目錄切換到startup.bat所在的目錄,搞定!

<plugin>  
    <artifactId>maven-antrun-plugin</artifactId>  
    <executions>  
      <execution>  
        <id>start-server</id>  
        <phase>package</phase>  
        <configuration>  
          <tasks>  
               <exec  
                 executable="${server_home}/bin/startup.bat"  
                 >  
               </exec>  
          </tasks>  
        </configuration>  
        <goals>  
          <goal>run</goal>  
        </goals>  
      </execution>  
    </executions>  
</plugin>