总结:
packaging
<xs:element name=“packaging” minOccurs=“0” type=“xs:string” default=“jar”>
Every Maven project has a packaging type. If it is not specified in the POM, then the default value “jar” would be used
scope
compile This is the default scope, used if none is specified. Compile dependencies are available in all classpaths of a project. Furthermore, those dependencies are propagated to dependent projects.
type
<xs:element name=“type” minOccurs=“0” type=“xs:string” default=“jar”>
parent
This allows the module to inherit the groupId and / or the version of its parent POM.
Invalid packaging for parent POM com.apol:my-module-1:1.1-SNAPSHOT (/Users/jibowang/workspace/my-projects/maven-learn/my-module-1/pom.xml), must be “pom” but is “jar” @ com.apol:my-module-1:1.1-SNAPSHOT
父pom所有属性都将被当前pom继承(可以覆盖), 包括 dependencyManagement 和 pluginManagement 等
dependencyManagement
可以在 dependencyManagement 节点下引入多个import pom依赖,引入的依赖只有里面的 dependencyManagement 会被合并到当前pom.xml文件
实验:
parent 可级联继承
# maven-app pom.xml
----
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
---
# my-module-1 pom.xml
---
<parent>
<artifactId>maven-app</artifactId>
<groupId>com.apol</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<version>1.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>test</scope>
</dependency>
</dependencies>
---
# my-module-2 pom.xml
---
<parent>
<groupId>com.apol</groupId>
<version>1.1-SNAPSHOT</version>
<artifactId>my-module-1</artifactId>
<relativePath>../my-module-1/pom.xml</relativePath>
</parent>
---
# dependency:tree
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ my-module-2 ---
[INFO] com.apol:my-module-2:jar:1.0-SNAPSHOT
[INFO] +- ch.qos.logback:logback-classic:jar:1.2.3:test
[INFO] | +- ch.qos.logback:logback-core:jar:1.2.3:test
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.25:test
[INFO] \- junit:junit:jar:3.8.1:test
parent 可继承 dependencies、dependencyManagement、pluginManagement
# maven-app
---
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
---
# my-module-1
---
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>test</scope>
</dependency>
</dependencies>
---
# my-module-2
---
<parent>
<groupId>com.apol</groupId>
<version>1.1-SNAPSHOT</version>
<artifactId>my-module-1</artifactId>
<relativePath>../my-module-1/pom.xml</relativePath>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<artifactId>maven-app</artifactId>
<groupId>com.apol</groupId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
</dependencies>
---
# dependency:tree
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ my-module-2 ---
[INFO] com.apol:my-module-2:jar:1.0-SNAPSHOT
[INFO] +- commons-io:commons-io:jar:2.5:compile
[INFO] \- ch.qos.logback:logback-classic:jar:1.2.3:test
[INFO] +- ch.qos.logback:logback-core:jar:1.2.3:test
[INFO] \- org.slf4j:slf4j-api:jar:1.7.25:test
[INFO]
dependencyManagement import pom 依赖管理
# maven-app
---
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
---
# my-module-1
---
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>test</scope>
</dependency>
</dependencies>
---
# my-module-2
---
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.apol</groupId>
<artifactId>my-module-1</artifactId>
<version>1.1-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<artifactId>maven-app</artifactId>
<groupId>com.apol</groupId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
</dependencies>
---
# dependency:tree
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ my-module-2 ---
[INFO] com.apol:my-module-2:jar:1.0-SNAPSHOT
[INFO] \- commons-io:commons-io:jar:2.5:compile
[INFO]