1、什麼是POM
Project Object Model,項目對象模型。經過xml格式保存的pom.xml文件。做用相似ant的build.xml文件,功能更強大。該文件用於管理:源代碼、配置文件、開發者的信息和角色、問題追蹤系統、組織信息、項目受權、項目的url、項目的依賴關係等等。html
一個完整的pom.xml文件,放置在項目的根目錄下。java
- <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/maven-v4_0_0.xsd">
- <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>
2、基本設置
一、maven的協做相關屬性
- <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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>my-project</artifactId>
- <version>1.0</version>
- <packaging>war</packaging>
- </project>
- groupId : 組織標識,例如:org.codehaus.mojo,在M2_REPO目錄下,將是: org/codehaus/mojo目錄。
- artifactId : 項目名稱,例如:my-project,在M2_REPO目錄下,將是:org/codehaus/mojo/my-project目錄。
- version : 版本號,例如:1.0,在M2_REPO目錄下,將是:org/codehaus/mojo/my-project/1.0目錄。
- packaging : 打包的格式,能夠爲:pom , jar , maven-plugin , ejb , war , ear , rar , par
二、POM之間的關係
主要用於POM文件的複用。apache
a)依賴關係:依賴關係列表(dependency list)是POM的重要部分
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.0</version>
- <scope>test</scope>
- </dependency>
- …
- </dependencies>
- groupId , artifactId , version :
- scope : compile(default),provided,runtime,test,system
- exclusions
b)繼承關係:繼承其餘pom.xml配置的機制。
好比父pom.xml:app
- <project>
- [...]
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.4</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- [...]
- </project>
在子pom.xml文件繼承它的依賴(還能夠繼承其餘的:developers and contributors、plugin lists、reports lists、plugin executions with matching ids、plugin configuration):maven
- [...]
- <parent>
- <groupId>com.devzuz.mvnbook.proficio</groupId>
- <artifactId>proficio</artifactId>
- <version>1.0-SNAPSHOT</version>
- </parent>
- [...]
在這種機制下,maven還提供了一個相似java.lang.Object的頂級父pom.xml文件:ide
能夠經過下面命令查看當前pom.xml受到超pom.xml文件的影響:
mvn help:effective-pomui
c)聚合關係:用於將多個maven項目聚合爲一個大的項目。
- <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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>my-parent</artifactId>
- <version>2.0</version>
- <modules>
- <module>my-project<module>
- </modules>
- </project>
三、屬性
maven的屬性,是值的佔位符,相似EL,相似ant的屬性,好比${X},可用於pom文件任何賦值的位置。有如下分類:url
- env.X:操做系統環境變量,好比${env.PATH}
- project.x:pom文件中的屬性,好比:<project><version>1.0</version></project>,引用方式:${project.version}
- settings.x:settings.xml文件中的屬性,好比:<settings><offline>false</offline></settings>,引用方式:${settings.offline}
- Java System Properties:java.lang.System.getProperties()中的屬性,好比java.home,引用方式:${java.home}
- 自定義:在pom文件中能夠:<properties><installDir>c:/apps/cargo-installs</installDir></properties>,引用方式:${installDir}
四、構建設置
構建有兩種build標籤:spa
- <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/maven-v4_0_0.xsd">
- …
- <!– "Project Build" contains more elements than just the BaseBuild set –>
- <build>…</build>
- <profiles>
- <profile>
- <!– "Profile Build" contains a subset of "Project Build"s elements –>
- <build>…</build>
- </profile>
- </profiles>
- </project>
build中的主要標籤:Resources和Plugins。操作系統
Resources:用於排除或包含某些資源文件
- <resources>
- <resource>
- <targetPath>META-INF/plexus</targetPath>
- <filtering>false</filtering>
- <directory>${basedir}/src/main/plexus</directory>
- <includes>
- <include>configuration.xml</include>
- </includes>
- <excludes>
- <exclude>**/*.properties</exclude>
- </excludes>
- </resource>
- </resources>
Plugins:設置構建的插件
- <build>
- …
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.0</version>
- <extensions>false</extensions>
- <inherited>true</inherited>
- <configuration>
- <classifier>test</classifier>
- </configuration>
- <dependencies>…</dependencies>
- <executions>…</executions>
- </plugin>