1. Maven
-
我們使用maven構建應用環境,因此我們先來簡單介紹maven。Maven是什麼?如何回答這個問題 要看你怎麼看這個問題。 絕大部分Maven用戶都稱Maven是一個"構建工具":一個用來把源代碼構建成可發佈的構件的工具。構建工程師和項目經理會說Maven是一個更復雜 的東西:一個項目管理工具。那麼區別是什麼? 像Ant這樣的構建工具僅僅是關注預處理,編譯,打包,測試和分發,而 Maven 這樣的一個項目管理工具提供了構建工具所提供功能的超集, 除了提供構建的功能,Maven還可以生成報告,生成Web站點,並且幫助推動工作團 隊成員間的交流。
-
Maven目前最新版本是2.1.0. 因爲maven2.0的版本與maven1.0相比完全是重新設計的,而且速度比以前更快,所以稱爲 maven2. 目前很多的開源項目都已經採用maven2構建,足見其流行好用的程度。 注:本指南中所提及的maven均指maven2。
-
mvn archetype:create :創建 Maven 項目
-
mvn compile :編譯源代碼
-
mvn test-compile :編譯測試代碼
-
mvn test : 運行應用程序中的單元測試
-
mvn site : 生成項目相關信息的網站
-
mvn clean :清除目標目錄中的生成結果
-
mvn package : 依據項目生成 jar 文件
-
mvn install :在本地 Repository 中安裝 jar
-
mvn eclipse:eclipse :生成 Eclipse 項目文件
- mvn -Dmaven.test.skip=true : 忽略測試文檔編譯
POM全稱是Project Object Model,即項目對象模型。pom.xml是maven的項目描述文件,它類似與antx的project.xml文件。pom.xml文件以xml的 形式描述項目的信息,包括項目名稱、版本、項目id、項目的依賴關係、編譯環境、持續集成、項目團隊、貢獻管理、生成報表等等。總之,它包含了所有的項目 信息。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.codehaus.mojo</groupId> <artifactId>my-project</artifactId> <version>1.0</version> </project>
modelVersion 描述這個POM文件是遵從哪個版本的項目描述符。
groupId 針對一個項目的普遍唯一識別符。通常用一個完全正確的包的名字來與其他項目的類似名字來進行區分(比如:org.apache.maven)。
artifactId 在給定groupID 的group裏面爲artifact 指定的標識符是唯一的 , artifact 代表的是被製作或者被一個project應用的組件(產出物)。
version 當前項目產生的artifact的版本
以上4個元素缺一不可,其中groupId, artifactId, version描述依賴的項目唯一標誌。
<project> <modelVersion>4.0.0</modelVersion> <!- The Basics 項目的基本信息-> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <packaging>...</packaging> <dependencies>...</dependencies> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <modules>...</modules> <properties>...</properties> <!- Build Settings 項目的編譯設置-> <build>...</build> <reporting>...</reporting> <!- More Project Information 其它項目信息 -> <name>...</name> <description>...</description> <url>...</url> <inceptionYear>...</inceptionYear> <licenses>...</licenses> <organization>...</organization> <developers>...</developers> <contributors>...</contributors> <!-- Environment Settings -> <issueManagement>...</issueManagement> <ciManagement>...</ciManagement> <mailingLists>...</mailingLists> <scm>...</scm> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <distributionManagement>...</distributionManagement> <profiles>...</profiles> </project>
project是pom.xml的根節點,至於其它元素請參考POM Reference
POM有3個很重要的關係:依賴、繼承、合成。
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <type>jar</type> <scope>test</scope> <optional>true</optional> </dependency> ... </dependencies>
如果想依賴一個maven庫中沒有的一個jar包,方法很簡單,就是先將此jar包使用以下的命令安裝到本地maven庫中:
mvn install:install-file -Dfile=my.jar -DgroupId=mygroup -DartifactId=myartifactId -Dversion=1
再把依賴關係加進去即可。
另一個強大的變化, maven帶來的是項目繼承。
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mygroup </groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <packaging>pom</packaging> </project>
packaging 類型,定義值爲 pom用於定義爲parent和合成多個項目。 當然我們創建的maven項目的pom都繼承maven的super pom, 如果想看項目(父或子)的完全的pom結構,可以運行:
mvn help:effective-pom
就可以了。
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mygroup </groupId> <artifactId>my-child-project</artifactId> <parent> <groupId>com.mygroup </groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <relativePath>../my-parent</relativePath> </parent> </project>
relativePath可以不需要,但是用於指明parent的目錄,用於快速查詢。
一個項目有多個模塊,也叫做多重模塊,或者合成項目。 如下的定義:
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mygroup </groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <modules> <module>my-child-project1<module> <module>my-child-project2<module> </modules> </project>
其中module 描述的是子項目的相對路徑 。
Maven 還我們提供了一個dependencyManagement元素,用來提供了一種方式來統一依賴版本號。dependencyManagement元素一 般用在頂層的父POM。使用pom.xml中的dependencyManagement元素能讓你在子項目中引用一個依賴而不用顯式的列出版本號。 Maven會沿着父子層次向上走,直到找到一個擁有dependencyManagement元素的項目,然後它就會使用在這個 dependencyManagement元素中指定的版本號,這樣就解決了修改依賴版本號不完全的問題。
Maven的Profile元素可以爲一個特殊的環境自定義一個特殊的構建,使得不同環境間構建的可移植性成爲可能。比如要使用 production profile來運行mvn install,你需要在命令行傳入-Pproduction參數,這裏production是profile的id。要驗證production profile覆蓋了默認的Compiler插件配置,可以像這樣以開啓調試輸入(-X) 的方式運行Maven。