POM文件結構
Project Object Model是Maven2項目的基礎所在,簡單來說它就是一個XML文件,Maven2用它來描述一個工程的整個生命周期所需要執行的一系列功能和特性。
最小配置
任何項目都最少要包含以下幾個標簽。
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.family168.maven2book</groupId> <artifactId>ch07</artifactId> <version>1.0</version> </project>
modelVersion這個標簽必須存在,而且它的值必須是4.0.0,這標志着我們現在使用的是maven2。
groupId和artifactId合起來作為當前項目的唯一標識,maven2最終會根據這兩個值,決定項目發布到repo上時所處的位置。
version是項目的版本號,它用來標記同一個項目發布的不同版本。
管理依賴
我們平常接觸最多的就是dependencies標簽了。因為既然使用了maven2,最大的得益之處還是可以用它統一管理依賴庫。dependencies和它內部的dependency標簽就用來配置當前項目所依賴的第三方庫的。
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.family168.maven2book</groupId> <artifactId>ch07</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
我們可以看到dependency標簽中也包含了groupId,artifactId和version信息,這三部分就是一個maven2項目所需的最小配置,也是maven2所管理的項目的唯一標識,有了這三個數據,maven2就可以在repo中查找到對應的依賴,並將其包含到我們的項目中,從而實現對依賴庫的管理。
上面的依賴中,我們使用了groupId為junit,artifactId為junit,版本為3.8.1的依賴,這個依賴會在test作用域中起作用,也就是說,只有在進行單元測試的時候,才會用到這個依賴,與之對應的是,當我們的程序正常編譯,運行,打包發布時,是不會包含這個依賴的。maven2內置了多個作用域,可以讓我們將不同階段使用的依賴庫進行隔離,之后我們會慢慢討論這部分的信息。
現在你需要知道,可以使用dependencies和dependency為項目定義多個依賴,並且每個依賴都需要groupId,artifactId和version這些數據就可以了。
構建部分
pom中一大部分配置都包含在build標簽中,這部分是在對項目進行構建時所需要的配置,當你對項目進行編譯,測試,打包,發布的時候,這部分配置就會在對應的階段起作用了。
build標簽中可以包含很多插件,這些插件可以配置到項目的某些構建階段,隨着項目的構建進程發揮作用。
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.family168.maven2book</groupId> <artifactId>ch07</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> </build> </project>
報表部分
我們執行mvn site就可以為項目生成一系列可以用來描述項目信息的網頁,maven2中的一大部分插件就是專門在這時候發揮效用的,它們可以根據項目的結構,源代碼,測試,SCM信息等,生成各種特殊功能的報表,這要把這些插件配置在reporting標簽中,它們就會在執行mvn site的同時起作用。
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.family168.maven2book</groupId> <artifactId>ch07</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> </build> <reporting> </reporting> </project>