Maven專案中POM檔案的詳解
阿新 • • 發佈:2019-01-03
pom標頭檔案的解釋
<?xml version="1.0" encoding="UTF-8"?> <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>com.juvenxu.mvnbook.account</groupId> <artifactId>account-email</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>account-email</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
-
程式碼的第一行是XML頭,指明瞭xml文件的版本和編碼方式。
-
project是所有pom.xml的根元素
-
modelVersion:指明瞭當前POM模型的版本,對於Maven2及Maven3來說,它只能是4.0.0
-
groupId:定義當前Maven專案隸屬的實際專案,定義專案屬於那個組,通常與域名反向一一對應
-
artifactId:該元素定義實際專案中的一個maven模組,當前專案在組中的唯一一個Id
-
version:該元素定義Maven專案當前所處的版本
-
packaging:該元素定義Maven專案的打包方式
-
name:該元素聲明瞭一個對於使用者更為友好的專案名稱。
-
scope:該元素指定依賴的範圍,預設是compile,表示該依賴對主程式碼和測試程式碼都有效。
-
maven預設的中央倉庫地址:http://repo1.maven.org/maven2/ ,可以點選直接訪問。
-
JBoss Maven庫(http://repository.jboss.com/maven2/)
配置POM使用遠端倉庫
<project> ... <repositories> <repository> <id>jboss</id> <name>JBoss Repository</name> <url>http://repository.jboss.com/maven2</url> <release> <enabled>true</enabled> </relsease> <snapshots> <enabled>false</enabled> </snapshots> <layout>default</layout> </repository> </repositories> ... </project>
- repository:宣告一個或多個遠端倉庫
- 任何一個倉庫的id是唯一的,maven自帶的中央倉庫的id是central
- url指向了倉庫的地址,該地址基於http協議
- release:用來控制釋出版構建的下載,snapshots:用來控制快照版構建的下載
- layout的值是default,表示倉庫佈局為maven2或maven3的預設佈局,而不是maven1的佈局
- updatePolicy用來檢查倉庫配置更新的頻率;checksumPolicy用來配置maven檢查檢驗和檔案的策略
- 遠端倉庫:https://mvnrepository.com/
遠端倉庫的認證
- 在setting.xml中配置倉庫認證資訊
<settings>
<servers>
<server>
<id>my-proj</id>
<username>repo-user</username>
<password>repo-pwd</password>
</server>
</servers>
</settings>
生命週期
maven的宣告週期包括:專案的清理,初始化,編譯,測試,打包,整合測試,驗證,部署,和站點生成。
- clean生命週期,清理專案
- default生命週期,構建專案
- site生命週期,建立專案站點
外掛
- Maven的具體任務是又外掛完成的,外掛是以獨立的構建形式存在的
- 每個外掛有很多功能,每個功能就是一個外掛目標
- 詳細的外掛列表地址:http://maven.apache.org/plugins/index.html
- 格式為: (外掛字首:外掛目標)
- 自定義繫結外掛:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<!-- 外掛的執行配置 -->
<executions>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
<executions>
</plugin>
</plugins>
</build>
- 在build下的plugins中宣告外掛的使用
- executions下的executoin元素用來配置執行一些任務
- phase配置生命週期
- goals指定要執行的外掛目標
依賴範圍
- 依賴範圍就是控制依賴與三種classPath的關係
- compile:編譯範圍依賴,該依賴為預設的依賴
- test:測試依賴範圍
- provided:已提供依賴範圍,對於編譯和測試有效
- runtime:執行時依賴範圍,對於測試和執行有效
- system:系統依賴範圍,對於編譯和測試有效
構建
- Maven的三大特性:屬性,Profile和資源過濾
屬性
- Maven屬性預設只有在POM中才會解析
內建屬性:
- 兩個常用的屬性: {version}表示專案版本
POM屬性:
- 使用者可以使用該屬性引用POM檔案中對應元素的值
- 常用的pom屬性的值:
- ${project.artifactId}:專案的artifactId
- ${project.groupId}:專案的groupId
- ${project.build.finalName}:專案打包輸出檔案的名稱
- ${project.build.directory}:專案構建輸出目錄,預設為target
自定義屬性:
- 使用者可以在pom檔案的元素下自定義maven屬性
setting屬性:
- 使用者可以使用setting.開頭的屬性應用setting.xml檔案中xml元素的值
Java系統屬性:
- 所有的java系統屬性都可以使用Maven屬性引用
環境屬性:
- 所有的環境變數都可以用env.開頭的Maven屬性引用
資源過濾
- Maven屬性只有在POM檔案中才會被解析,要讓Maven解析資源目錄中的Maven屬性,即開啟資源過濾
- Maven預設的主資源目錄(src/main/resources)和測試資源目錄(src/test/resources)的定義在超級POM中
- 一般資原始檔與web資原始檔處理不同。前者通過maven-resources-plugin處理,後者通過maven-war-plugin處理。
- 配置主資源目錄
<resources>
<resource>
<dircetory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering> <!--開啟資源過濾-->
<resource>
<resources>
- 配置測試資源目錄
<testResources>
<testResource>
<dircetory>${project.basedir}/src/test/resources</directory>
<filtering>true</filtering>
<testResource>
<testResources>
- 配置多個資源目錄
<resources>
<resource>
<dircetory> src/main/resources</directory>
<filtering>true</filtering>
<resource>
<resource>
<dircetory> src/main/sql</directory>
<filtering>false</filtering>
<resource>
<resources>
Maven Profile
- 啟用profile的方式
- 命令列啟用:$ mvn clean install - P dev-x,dev-y 啟用dev-x和dev-y兩個profile
- settings檔案顯式啟用:
<settings>
<activeProfiles>
<!--表示dev-x檔案一直處於啟用狀態-->
<activeProfile>dev-x</activeProfile>
</activeProfiles>
</settings>
- 系統屬性啟用
- 作業系統環境啟用
- 檔案存在與否啟用
- 預設啟用:使用者在定義profile的時候指定其預設啟用,如果有任何一個profile通過其他任意一種方式激活了,所有的預設啟用方式均會失效。
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault></activeByDefault>
</activation>
</profile>
</profiles>
- profile的種類:
- pom.xml:pom.xml中宣告的profile只對當前專案有效。
- 使用者settings.xml:使用者目錄下.m2/settings.xml中的profile對本機上該使用者所有的Maven專案有效
- 全域性settings.xml:安裝目錄下.conf/settings.xml中的profile對本機上該使用者所有的Maven專案有效