Maven的POM详解(三)

本文译自: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一个信号,在搜索本地和远程资源库之前,首先要在指定的路径中搜索本工程的父工程。


©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值