Maven,發音是[`meivin],"專家"的意思。它是一個很好的項目管理工具,很早就進入了個人必備工具行列,可是此次爲了把project1項目徹底遷移並應用maven,因此對maven進行了一些深刻的學習。寫這個學習筆記的目的,一個是爲了本身備忘,二則但願可以爲其餘人學習使用maven 縮短一些時間。css
首先我把maven的概念快速的梳理一下,讓咱們快速地創建起一個比較精確的maven應用場景。html
讀書時候要先限定範圍,避免一些有害的遐想。要說maven不是什麼,咱們能夠從以下幾個要點來展開java
maven將本身定位爲一個項目管理工具。它負責管理項目開發過程當中的幾乎全部的東西:mysql
maven把項目的構建劃分爲不一樣的生命週期(lifecycle),在我看來,劃分的已是很是仔細了,你們能夠參考這裏 。粗略一點的話,它這個過程(phase)包括:編譯、測試、打包、集成測試、驗證、部署。maven中全部的執行動做(goal)都須要指明本身在這個過程當中的執行位置,而後maven執行的時候,就依照過程的發展依次調用這些goal進行各類處理。linux
這個也是maven的一個基本調度機制。通常來講,位置稍後的過程都會依賴於以前的過程。固然,maven一樣提供了配置文件,能夠依照用戶要求,跳過某些階段。c++
所謂的"約定優於配置",在maven中並非徹底不能夠修改的,他們只是一些配置的默認值而已。可是使用者除非必要,並不須要去修改那些約定內容。maven默認的文件存放結構以下:web
每個階段的任務都知道怎麼正確完成本身的工做,好比compile任務就知道從src/main/java下編譯全部的java文件,並把它的輸出class文件存放到target/classes中。算法
對maven來講,採用"約定優於配置"的策略能夠減小修改配置的工做量,也能夠下降學習成本,更重要的是,給項目引入了統一的規範。spring
maven使用以下幾個要素來惟必定位某一個輸出物: groupId:artifactId:packaging:version 。好比org.springframework:spring:2.5 。每一個部分的解釋以下:sql
maven有本身的版本規範,通常是以下定義 <major version>.<minor version>.<incremental version>-<qualifier>,好比1.2.3-beta-01。要說明的是,maven本身判斷版本的算法是major,minor,incremental部分用數字比較,qualifier部分用字符串比較,因此要當心 alpha-2和alpha-15的比較關係,最好用 alpha-02的格式。
maven在版本管理時候可使用幾個特殊的字符串 SNAPSHOT ,LATEST ,RELEASE 。好比"1.0-SNAPSHOT"。各個部分的含義和處理邏輯以下說明:
maven把整個maven管理的項目分爲幾個部分,一個部分是源代碼,包括源代碼自己、相關的各類資源,一個部分則是單元測試用例,另一部分則是各類maven的插件。對於這幾個部分,maven能夠獨立管理他們,包括各類外部依賴關係。
依賴管理通常是最吸引人使用maven的功能特性了,這個特性讓開發者只須要關注代碼的直接依賴,好比咱們用了spring,就加入spring依賴說明就能夠了,至於spring本身還依賴哪些外部的東西,maven幫咱們搞定。
任意一個外部依賴說明包含以下幾個要素:groupId, artifactId, version, scope, type, optional。其中前3個是必須的,各自含義以下:
maven認爲,程序對外部的依賴會隨着程序的所處階段和應用場景而變化,因此maven中的依賴關係有做用域(scope)的限制。在maven中,scope包含以下的取值:
另外,代碼有代碼本身的依賴,各個maven使用的插件也能夠有本身的依賴關係。依賴也能夠是可選的,好比咱們代碼中沒有任何cache依賴,可是hibernate可能要配置cache,因此該cache的依賴就是可選的。
maven的多項目管理也是很是強大的。通常來講,maven要求同一個工程的全部子項目都放置到同一個目錄下,每個子目錄表明一個項目,好比
按照這種格式存放,就是繼承方式,全部具體子項目的pom.xml都會繼承總項目pom的內容,取值爲子項目pom內容優先。
要設置繼承方式,首先要在總項目的pom中加入以下配置
其次在每一個子項目中加入
便可。
固然,繼承不是惟一的配置文件共用方式,maven還支持引用方式。引用pom的方式更簡單,在依賴中加入一個type爲pom的依賴便可。
用戶能夠在maven中定義一些屬性,而後在其餘地方用${xxx}進行引用。好比:
maven提供了三個隱式的變量,用來訪問系統環境變量、POM信息和maven的settings:
profile是maven的一個重要特性,它可讓maven可以自動適應外部的環境變化,好比同一個項目,在linux下編譯linux的版本,在win下編譯win的版本等。一個項目能夠設置多個profile,也能夠在同一時間設置多個profile被激活(active)的。自動激活的 profile的條件能夠是各類各樣的設定條件,組合放置在activation節點中,也能夠經過命令行直接指定。profile包含的其餘配置內容能夠覆蓋掉pom定義的相應值。若是認爲profile設置比較複雜,能夠將全部的profiles內容移動到專門的 profiles.xml 文件中,不過記得和pom.xml放在一塊兒。
activation節點中的激活條件中常見的有以下幾個:
maven的操做有兩種方式,一種是經過mvn命令行命令,一種是使用maven的eclipse插件。由於使用eclipse的maven插件操做起來比較容易,這裏就只介紹使用mvn命令行的操做。
maven的主執行程序爲mvn.bat,linux下爲mvn.sh,這兩個程序都很簡單,它們的共同用途就是收集一些參數,而後用 java.exe來運行maven的Main函數。maven一樣須要有配置文件,名字叫作settings.xml,它放在兩個地方,一個是maven 安裝目錄的conf目錄下,對全部使用該maven的用戶都起做用,咱們稱爲主配置文件,另一個放在 %USERPROFILE%/.m2/settings.xml下,咱們成爲用戶配置文件,只對當前用戶有效,且能夠覆蓋主配置文件的參數內容。還有就是項目級別的配置信息了,它存放在每個maven管理的項目目錄下,叫pom.xml,主要用於配置項目相關的一些內容,固然,若是有必要,用戶也能夠在 pom中寫一些配置,覆蓋住配置文件和用戶配置文件的設置參數內容。
通常來講,settings文件配置的是好比repository庫路徑之類的全局信息,具體能夠參考官方網站的文章 。
要建立一個新的maven工程,咱們須要給咱們的工程指定幾個必要的要素,就是maven產品座標的幾個要素:groupId, artifactId,若是願意,你也能夠指定version和package名稱。咱們先看一個簡單的建立命令:
d:\work\temp>mvn archetype:create -DgroupId=com.abc -DartifactId=product1 -DarchetypeArtifactId=maven-archetype-webapp
首先看這裏的命令行參數的傳遞結構,怪異的 -D參數=值 的方式是 java.exe 要求的方式。這個命令建立一個web工程,目錄結構是一個標準的maven結構,以下:
你們要注意,這裏目錄結構的佈局其實是由參數 archetypeArtifactId 來決定的,由於這裏傳入的是 maven-archetype-webapp 若是咱們傳入其餘的就會建立不一樣的結構,默認值爲 maven-archetype-quickstart ,有興趣的讀者能夠參考更詳細的列表 ,我把部分經常使用的列表在這裏:
Artifact | Group | Version | Repository | Description |
---|---|---|---|---|
maven-archetype-j2ee-simple | org.apache.maven.archetypes | A simple J2EE Java application | ||
maven-archetype-marmalade-mojo | org.apache.maven.archetypes | A Maven plugin development project using marmalade | ||
maven-archetype-plugin | org.apache.maven.archetypes | A Maven Java plugin development project | ||
maven-archetype-portlet | org.apache.maven.archetypes | A simple portlet application | ||
maven-archetype-profiles | org.apache.maven.archetypes | |||
maven-archetype-quickstart | org.apache.maven.archetypes | |||
maven-archetype-simple | org.apache.maven.archetypes | |||
maven-archetype-site-simple | org.apache.maven.archetypes | A simple site generation project | ||
maven-archetype-site | org.apache.maven.archetypes | A more complex site project | ||
maven-archetype-webapp | org.apache.maven.archetypes | A simple Java web application | ||
maven-archetype-har | net.sf.maven-har | 0.9 | Hibernate Archive | |
maven-archetype-sar | net.sf.maven-sar | 0.9 | JBoss Service Archive |
你們能夠參考更詳細的 archetype:create 幫助 和 archtype參考信息 。
多項目管理是maven的主要特點之一,對於一個大型工程,用maven來管理他們之間複雜的依賴關係,是再好不過了。maven的項目配置之間的關係有兩種:繼承關係和引用關係。
maven默認根據目錄結構來設定pom的繼承關係,即下級目錄的pom默認繼承上級目錄的pom。要設定二者之間的關係很簡單,上級pom以下設置:
要記住的是,這裏的module是目錄名,不是子工程的artifactId。子工程以下設置:
這樣二者就相互關聯起來了,繼承關係就設定完畢,全部父工程的配置內容都會自動在子工程中生效,除非子工程有相同的配置覆蓋。若是你不喜歡層層遞進的目錄結構來實現繼承,也能夠在parent中加入 <relativePath>../a-parent/pom.xml</relativePath> 來制定parent項目的相對目錄。繼承關係一般用在項目共同特性的抽取上,經過抽取公共特性,能夠大幅度減小子項目的配置工做量。
引用關係是另一種複用的方式,maven中配置引用關係也很簡單,加入一個 type 爲 pom 的依賴便可。
可是不管是父項目仍是引用項目,這些工程都必須用 mvn install 或者 mvn deploy 安裝到本地庫才行,不然會報告依賴沒有找到,eclipse編譯時候也會出錯。
須要特別提出的是複用過程當中,父項目的pom中能夠定義 dependencyManagement 節點,其中存放依賴關係,可是這個依賴關係只是定義,不會真的產生效果,若是子項目想要使用這個依賴關係,能夠在自己的 dependency 中添加一個簡化的引用
這種方法能夠避免版本號滿天飛的狀況。
在maven中通常都會用到安裝庫文件的功能,一則是咱們經常使用的hibernate要使用jmx庫,可是由於sun的license限制,因此沒法將其直接包含在repository中。因此咱們使用mvn命令把jar安裝到咱們本地的repository中
mvn install:install-file -DgroupId=com.sun.jdmk -DartifactId=jmxtools -Dversion=1.2.1 -Dpackaging=jar -Dfile=/path/to/file
若是咱們想把它安裝到公司的repository中,須要使用命令
mvn deploy:deploy-file -DgroupId=com.sun.jdmk -DartifactId=jmxtools -Dversion=1.2.1 -Dpackaging=jar -Dfile=/path/to/file -Durl=http://xxx.ss.com/sss.xxx -DrepositoryId=release-repo
對於咱們的工程輸出,若是須要放置到公司的repository中的話,能夠經過配置pom來實現
這裏使用的scp方式提交庫文件,還有其餘方式可使用,請參考faq部分。而後記得在你的settings.xml中加入這一內容
maven定義了不少變量屬性,參考這裏 http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide
咱們已經知道maven預約義了許多的階段(phase),每一個插件都依附於這些階段,而且在進入某個階段的時候,調用運行這些相關插件的功能。咱們先來看完整的maven生命週期:
生命週期 | 階段描述 |
---|---|
validate | 驗證項目是否正確,以及全部爲了完整構建必要的信息是否可用 |
generate-sources | 生成全部須要包含在編譯過程當中的源代碼 |
process-sources | 處理源代碼,好比過濾一些值 |
generate-resources | 生成全部須要包含在打包過程當中的資源文件 |
process-resources | 複製並處理資源文件至目標目錄,準備打包 |
compile | 編譯項目的源代碼 |
process-classes | 後處理編譯生成的文件,例如對Java類進行字節碼加強(bytecode enhancement) |
generate-test-sources | 生成全部包含在測試編譯過程當中的測試源碼 |
process-test-sources | 處理測試源碼,好比過濾一些值 |
generate-test-resources | 生成測試須要的資源文件 |
process-test-resources | 複製並處理測試資源文件至測試目標目錄 |
test-compile | 編譯測試源碼至測試目標目錄 |
test | 使用合適的單元測試框架運行測試。這些測試應該不須要代碼被打包或發佈 |
prepare-package | 在真正的打包以前,執行一些準備打包必要的操做。這一般會產生一個包的展開的處理過的版本(將會在Maven 2.1+中實現) |
package | 將編譯好的代碼打包成可分發的格式,如JAR,WAR,或者EAR |
pre-integration-test | 執行一些在集成測試運行以前須要的動做。如創建集成測試須要的環境 |
integration-test | 若是有必要的話,處理包併發布至集成測試能夠運行的環境 |
post-integration-test | 執行一些在集成測試運行以後須要的動做。如清理集成測試環境。 |
verify | 執行全部檢查,驗證包是有效的,符合質量規範 |
install | 安裝包至本地倉庫,以備本地的其它項目做爲依賴使用 |
deploy | 複製最終的包至遠程倉庫,共享給其它開發人員和項目(一般和一次正式的發佈相關) |
maven核心的插件列表能夠參考 http://maven.apache.org/plugins/index.html 。這裏僅列舉幾個經常使用的插件及其配置參數:
除了如下的幾個faq條目以外,還有一些faq能夠參考
兄弟們若是有其餘問題,歡迎跟帖提問!
答:直接在pom文件中加入一個dependency節點,若是要刪除依賴,把對應的dependency節點刪除便可。
答:設置exclusion便可。
答:加入一個特殊的依賴關係,使用system類型,以下:
可是要記住,發佈的時候不會複製這個jar。須要手工配置,並且其餘project依賴這個project的時候,會報告警告。若是沒有特殊要求,建議直接註冊發佈到repository。
答:在project屬性中去掉java build path中對其餘 project 的依賴關係,直接在pom中設置依賴關係便可
答:使用 assembly 插件便可。
答:maven自己在發佈的時候,能夠發佈單純的jar,也能夠同時發佈xxx-tests.jar和xxx-javadoc.jar(你們常常在repository中能夠看到相似的東西)。咱們本身的項目A要同時輸出test.jar能夠作以下的設置
修改pom.xml文件,將舊版jar的依賴內容中的版本直接修改成新版本便可。
將依賴的文件安裝到本地庫,用以下命令能夠完成:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true Where: <path-to-file> the path to the file to load <group-id> the group that the file should be registered under <artifact-id> the artifact name for the file <version> the version of the file <packaging> the packaging of the file e.g. jar
答:使用資源過濾功能,好比:
答: maven-svn-revision-number-plugin 能夠從 SVN 中獲取版本號,並將其變成環境變量,交由其餘插件或者profile使用,詳細幫助在這裏 。通常和resource的filter機制同時使用
這段代碼負責把resource文件中的內容替換成適當內容
有好幾種方法均可以實現跳過單元測試步驟,一種是給mvn增長命令行參數 -Dmaven.test.skip=true 或者 -DskipTests=true;另一種是給surefire插件增長參數,以下:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.8</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin> </plugins> </build> [...] </project>
能夠,運行時候增長命令行參數 -Dtest=MyTest 便可,其中MyTest是所須要運行的單元測試用例名稱,可是不須要包含package部分。
答:如下內容設定編譯器編譯java1.5的代碼
要設置其餘插件的參數也能夠,請參考對應插件的幫助信息
答:指定source目錄和test-source目錄便可。
這個例子把源代碼設置成了src目錄,測試代碼在test目錄,因此輸出到bin目錄。這裏要注意,directory若是也設置成bin目錄的話,maven打包的時候會引發死循環,由於directory是全部工做存放的地方,默認包含outputDirectory定義的目錄在內。
設置一個變量便可
{color:blue}以上是官方給出的解決方案,可是通過嘗試這樣只能影響到resource處理時候的編碼{color},真正有用的是以下配置:
{code:xml} <build> ... <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> ... </build> {code}
答:使用native插件,具體配置方法參考[http://mojo.codehaus.org/maven-native/native-maven-plugin/]
{code:xml} <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>native-maven-plugin</artifactId> <extensions>true</extensions> <configuration> </plugin> {code}
答:首先修改maven的配置文件,給maven-assembly-plugin增長一個jar-with-dependencies的描述。
{code:xml} <project> [...] <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins> </build> [...] </project> {code}
而後使用命令打包便可:
mvn assembly:assembly
答:在pom中配置額外的資源目錄。若是須要的話,還能夠指定資源目錄的輸出位置
{code:xml} <build> ... <resources> <resource> <filtering>true</filtering> <directory>src/main/command</directory> <includes> <include>run.bat</include> <include>run.sh</include> </includes> <targetPath>/abc</targetPath> </resource> <resource> <directory>src/main/scripts</directory> </resource> </resources> ... </build> {code}
答:使用另一個插件,並仿照以下配置pom
{code:xml} <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>src/config/java</source> <source>src/main/java</source> <source>src/member/java</source> </sources> </configuration> </execution> </executions> </plugin> {code}
答:使用一個maven插件,而後使用includes和excludes。同理,也能夠處理資源的過濾。
{code:xml} <build> <sourceDirectory>http://www.cnblogs.com/src/java</sourceDirectory> <plugins> <plugin> <groupId>com.sun.enterprise</groupId> <artifactId>hk2-maven-plugin</artifactId> <configuration> <includes> <include>com/sun/logging/LogDomains.*</include> <include>com/sun/enterprise/util/OS.java</include> <include>com/sun/enterprise/util/io/FileUtils.java</include> <include>com/sun/enterprise/util/zip/**</include> <include>com/sun/enterprise/util/i18n/**</include> <include>com/sun/enterprise/deployment/backend/IASDeploymentException.java</include> </includes> <excludes> <exclude>com/sun/enterprise/config/ConfigBeansFactory.java</exclude> <exclude>com/sun/enterprise/config/clientbeans/**</exclude> </excludes> </configuration> </plugin> </plugins> <resources> <resource> <directory>http://www.cnblogs.com/src/java</directory> <includes> <include>**/*.properties</include> </includes> </resource> </resources> </build> {code}
答:配置以下
{code:xml} <build> <sourceDirectory>src/java</sourceDirectory> <plugins> <plugin> <groupId>com.sun.enterprise</groupId> <artifactId>hk2-maven-plugin</artifactId> </plugin> </plugins> </build> {code}
答:添加插件
hibernate3-maven-plugin
,按照以下配置:
{code:xml} <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>hibernate3-maven-plugin</artifactId> <version>2.1</version> <configuration> <components> <component> <name>hbm2ddl</name> <implementation>annotationconfiguration</implementation> </component> </components> </configuration> <dependencies> <dependency> <groupId>hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>${hsqldb.version}</version> </dependency> </dependencies> </plugin> {code}
答:固然能夠,你可使用插件 Tycho,詳細內容能夠參考這裏[http://mattiasholmqvist.se/2010/02/building-with-tycho-part-1-osgi-bundles/].
<plugin> <groupid>org.sonatype.tycho</groupid> <artifactid>target-platform-configuration</artifactid> <version>0.7.0</version> <configuration> <resolver>p2</resolver> </configuration> </plugin> 另外,老牌的pde-maven-plugin就不要用了,已經好幾年沒見更新了。
使用專門的antrun插件,而且在target標籤內部加入ant的代碼
<plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.6</version> <executions> <execution> <phase> <!-- 生命週期階段 --> </phase> <configuration> <target> <!-- 加入target內部的代碼 --> </target> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin>
2)如何在ant腳本中引用maven的classpath?
maven給每個依賴都生成了一個屬性,格式爲"groupId:artifactId[:classifier]:type",好比,若是一下例子就顯示依賴的org.apache.common-util的jar文件路徑
<echo message="Dependency JAR Path: ${org.apache:common-util:jar}"/>
另外,maven還預約義了四個classpath的引用,他們是
3)如何使用antrun插件運行外部的build文件?
很簡單,直接在antrun裏邊使用ant指令便可,以下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.6</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <configuration> <target> <!-- 同時傳遞內置的classpath給外部ant文件 --> <property name="compile_classpath" refid="maven.compile.classpath"/> <property name="runtime_classpath" refid="maven.runtime.classpath"/> <property name="test_classpath" refid="maven.test.classpath"/> <property name="plugin_classpath" refid="maven.plugin.classpath"/> <ant antfile="${basedir}/build.xml"> <target name="test"/> </ant> </target> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin>
答:使用ant的[maven task|http://maven.apache.org/ant-tasks/index.html],不過只有ant 1.6以上和jdk 1.5環境才支持。
答:給插件增長testFailureIgnore參數,並設置爲false。若是要屏蔽該階段,則用
<skip>true</skip>
{code:xml} <project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <testFailureIgnore>true</testFailureIgnore> </configuration> </plugin> </plugins> </build> [...] </project> {code}
答:加入PMD檢查,如下代碼若是在
reporting
節點中加入則在
mvn site
中執行,若是在
build
節點中加入,則在build的時候自動運行檢查。詳細配置參考[pmd插件使用說明|http://maven.apache.org/plugins/maven-pmd-plugin/]
{code:xml} <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> <version>2.5</version> </plugin> </plugins> {code}
加入 checkstyle 檢查,詳細配置參考[checkstyle插件使用說明|http://maven.apache.org/plugins/maven-checkstyle-plugin/],一樣注意放置在reporting和build節點中的區別(全部報表類插件都要一樣注意):
{code:xml} <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <version>2.5</version> </plugin> {code}
加入 simian 的支持,simian是一個支持代碼類似度檢查的工具,目前有maven插件,也有checkstyle的插件。它不只能夠檢查java,甚至能夠支持文本文件的檢查。詳細幫助信息參考[這裏|http://www.redhillconsulting.com.au/products/simian/]。simian 的 maven插件在[這裏|http://mojo.codehaus.org/simian-report-maven-plugin/introduction.html]
{code:xml} <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>simian-maven-plugin</artifactId> <version>1.6.1</version> </plugin> </plugins> ... </build> {code}
加入 jdepend 檢查,詳細配置參考[jdepend使用說明|http://mojo.codehaus.org/jdepend-maven-plugin/],
{code:xml} <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jdepend-maven-plugin</artifactId> <version>2.0-beta-2</version> </plugin> {code}
加入 findbugz 檢查,詳細配置參考[findbugz使用說明|http://mojo.codehaus.org/findbugs-maven-plugin/usage.html],
{code:xml} <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> <version>2.0.1</version> </plugin> {code}
加入javadoc生成,詳細配置參考[javadoc usage|http://maven.apache.org/plugins/maven-javadoc-plugin/usage.html]
{code:xml} <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.7</version> <configuration> ... </configuration> </plugin> {code}
加入 jxr 支持,JXR是一個生成java代碼交叉引用和源代碼的html格式的工具,詳細配置信息參考[jxr usage|http://maven.apache.org/plugins/maven-jxr-plugin/]。注意,jxr沒有必要在build階段運行。
{code:xml} <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jxr-plugin</artifactId> <version>2.1</version> </plugin> </plugins> </reporting> {code}
加入 Cobertura 支持,它是一個代碼覆蓋率工具,能夠用來評估具備相應測試的源代碼的比率。詳細幫助在[這裏|http://mojo.codehaus.org/cobertura-maven-plugin/index.html]。另一個功能類似的軟件是[EMMA|http://emma.sourceforge.net/samples.html],詳細的幫助在[這裏|http://mojo.codehaus.org/emma-maven-plugin/usage.html]。兩個產品的比較文章在[這裏|http://www.topcoder.com/tc?module=Static&d1=features&d2=030107],我的傾向於都要用,由於給出的指標不同,都有參考做用。
{code:xml|title=Cobertura } <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.4</version> <configuration> <check> <branchRate>85</branchRate> <lineRate>85</lineRate> <haltOnFailure>true</haltOnFailure> <totalBranchRate>85</totalBranchRate> <totalLineRate>85</totalLineRate> <packageLineRate>85</packageLineRate> <packageBranchRate>85</packageBranchRate> <regexes> <regex> <pattern>com.example.reallyimportant.*</pattern> <branchRate>90</branchRate> <lineRate>80</lineRate> </regex> <regex> <pattern>com.example.boringcode.*</pattern> <branchRate>40</branchRate> <lineRate>30</lineRate> </regex> </regexes> </check> </configuration> <executions> <execution> <goals> <goal>clean</goal> <goal>check</goal> </goals> </execution> </executions> </plugin> {code}
{code:xml|title=EMMA} <reporting> ... <plugins> ... <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>emma-maven-plugin</artifactId> <version>1.0-alpha-3-SNAPSHOT</version> </plugin> ... </plugins> ... </reporting> {code}
添加 javaNCSS 插件,它是一個java代碼的度量工具,詳細參考在[這裏|http://mojo.codehaus.org/javancss-maven-plugin/]。
{code:xml} <reporting> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>javancss-maven-plugin</artifactId> <version>2.0-beta-2</version> </plugin> </plugins> </reporting> {code}
h4. profile相關
答:使用!前綴,請看示例:
{code:xml} <activation> <property> <name>!environment.type</name> </property> </activation> {code}
h4. 部署相關
答:本文摘自 [http://blog.csdn.net/zyxnetxz/archive/2009/05/18/4199348.aspx]{panel} *Distribution Management* 用於配置分發管理,配置相應的產品發佈信息,主要用於發佈,在執行mvn deploy後表示要發佈的位置 *# 配置到文件系統
{code:xml} <distributionManagement> <repository> <id>proficio-repository<id> <name>Proficio Repository<name> <url>file://${basedir}/target/deploy<url> <repository> <distributionManagement> {code}
*# 使用ssh2配置
{code:xml} <distributionManagement> <repository> <id>proficio-repository<id> <name>Proficio Repository<name> <url>scp://sshserver.yourcompany.com/deploy<url> <repository> <distributionManagement> {code}
*# 使用sftp配置
{code:xml} <distributionManagement> <repository> <id>proficio-repositoryi<d> <name>Proficio Repository<name> <url>sftp://ftpserver.yourcompany.com/deploy<url> <repository> <distributionManagement> {code}
*# 使用外在的ssh配置編譯擴展用於指定使用wagon外在ssh提供,用於提供你的文件到相應的遠程服務器。
{code:xml} <distributionManagement> <repository> <id>proficio-repository<id> <name>Proficio Repository<name> <url>scpexe://sshserver.yourcompany.com/deploy<url> <repository> <distributionManagement> <build> <extensions> <extension> <groupId>org.apache.maven.wagon<groupId> <artifactId>wagon-ssh-external<artifactId> <version>1.0-alpha-6<version> <extension> <extensions> <build> {code}
*# 使用ftp配置
{code:xml} <distributionManagement> <repository> <id>proficio-repository<id> <name>Proficio Repository<name> <url>ftp://ftpserver.yourcompany.com/deploy<url> <repository> <distributionManagement> <build> <extensions> <extension> <groupId>org.apache.maven.wagongroupId> <artifactId>wagon-ftpartifactId> <version>1.0-alpha-6version> <extension> <extensions> <build> {code}
{panel} h4. 插件配置
答: 配置site插件的編碼設置
{code:xml} ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>2.0-beta-6</version> <configuration> <outputEncoding>UTF-8</outputEncoding> </configuration> </plugin> ... {code}
答: