本文译自:http://maven.apache.org/pom.html
除外
除外是明确的告诉Maven,你不想包含指定的依赖工程中的依赖(即,不包含传递性依赖)。例如,maven-embedder需要maven-core,但是你不希望使用它或它的依赖,那么就可以它作为一个除外项目来添加。
<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">
...
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
</exclusion>
</exclusions>
</dependency>
...
</dependencies>
...
</project>
有些时候,除外对于裁剪传递性依赖是有好处的。一个依赖可能指定了不正确的范围,或者跟工程中的其他依赖发生了冲突。使用通配符可以很容易的排除所有的传递性依赖。在下面的示例中,你可以使用maven-embedder来进行工作,并且想要自己来管理相关的依赖,因此你可以裁剪掉所有的传递性依赖。
<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">
...
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>3.1.0</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
...
</dependencies>
...
</project>
exclusions:exclusions元素可以包含一个或多个exclusion元素,每个exclusion元素都要包含一个groupId和artifactId,用来指定要排除在外的依赖,跟optional元素的指示不一样(optional元素所指定的内容可以被安装和使用,也可以不被安装和使用),exclusions指示会主动的从依赖树中删除自己。
继承
Maven带给编译管理一个附加的强大功能是工程继承的概念。尽管在Ant等编译系统中,继承能够确保被模仿,但是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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<packaging>pom</packaging>
</project>
对于那些会被继承的父工程或聚集(多模块)工程,packaging类型必须是pom。这些类型定义的目标会跟一组生命周期绑定。例如,如果packaging是jar,那么在packag阶段会执行jar:jar目标。如果packaging是pom,那么会执行site:attach-descriptor目标。现在我们可以给父POM添加一些值,这些值会被它的子工程继承。在父POM中会被它的子工程继承的元素包括:
dependencies
developers and contributors
plugin lists
plugin executions with matching ids
plugin configuration
<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>
<parent>
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<relativePath>../my-parent</relativePath>
</parent>
<artifactId>my-project</artifactId>
</project>
注意relativePath元素,它不是必须的,但它可以作为通知Maven一个信号,在搜索本地和远程资源库之前,首先要在指定的路径中搜索本工程的父工程。
时间: 2024-10-26 13:29:32