发行说明 - Maven 3.2.1

Maven 3.2.1

Apache Maven 团队宣布发布 Maven 3.2.1。

Maven 3.2.1可供下载

Maven 是一个软件项目管理和理解工具。基于项目对象模型 (POM) 的概念,Maven 可以从一个中心位置管理项目的构建、报告和文档。

Maven 3 旨在确保与 Maven 2 的向后兼容性,提高可用性,提高性能,允许安全嵌入,并为实现许多高要求的特性铺平道路。

核心版本独立于可用的插件。插件的进一步版本将单独制作。有关更多信息,请参阅插件列表。

我们希望您喜欢使用 Maven!如果您有任何问题,请咨询:

完整的变更列表可以在我们的问题管理系统中找到。

强调

传递依赖排除 ( MNG-2315 )

剪辑依赖项的传递依赖项有时很有用。依赖项可能有错误指定的范围,或者与项目中其他依赖项冲突的依赖项。使用通配符排除可以轻松排除所有依赖项的传递依赖项。在下面的情况下,您可能正在使用 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 https://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>

反应堆变化

Maven 反应器现在是可插拔的 ( MNG-5578 )。这个特性需要引入一个新的自定义 Guice 范围@SessionScoped,因为我们需要在创建之后和构建执行之前将其注入MavenSession反应器。MavenSession反应器作为一种特殊类型的工件存储库,提供用户在构建多模块项目时期望的当前行为。新的实现可以提供不同的语义,这可能为多模块项目的构建提供新的方法,或者修复/添加新功能,例如从反应器中正确解析测试 JAR。既然实现是可插拔的,我们总是可以默认为现有行为,并允许人们通过功能切换来尝试新行为。

反应堆现在限制使用时在内部公开的项目--projects( MNG-5557 )。之前发生的情况是,即使您限制使用--projects. 这种行为现在是明确的:您指定使用--projects的是您将构建和解决的内容,如果您需要的项目不存在于约束集中,则将咨询本地存储库。在某些情况下,您可能仍希望访问通常是构建的一部分但当前未构建的项目,并且这些项目被跟踪 ( MNG-5582 ) 并在MavenSession. 现在也可以在使用-am-amd选项 ( MNG-5230 )。如果您选择要构建的项目及其依赖项 ( -amd),您可以使用如下命令排除一个或多个依赖项mvn -amd --projects foo,bar,!dependent-of-bar

上述这些组合更改将使我们能够以改进/不同的行为对 Maven 反应器进行新的实现。例如,这可能允许您进入一个目录并运行 Maven,并让 Maven 选择您正在构建的项目周围的项目,而不是转到本地存储库。我们可以尝试不同的实现,让用户在它们之间切换,直到我们最终决定正确的行为。许多用户抱怨反应堆的行为,这允许逐步改进。

AbstractMavenLifecycleParticipant 更改 ( MNG-5389 )

AbstractMavenLifecycleParticipant一个新afterSessionEnd()方法,将在构建完成时执行。添加此功能是为了解决并行构建中构建部署的结束。许多插件中使用的当前逻辑是在反应器中的项目数组中查找最后一个项目,但是在并行构建期间,没有保证的执行顺序,并且假定存在的插件中断。AbstractMavenLifecycleParticipant.afterSessionEnd()当构建最终完成并提供逻辑时,需要有一种方法来执行逻辑。

新的生成器界面 ( MNG-5575 )

有一个新的 Builder 接口,类可以实现该接口来封装构建项目的策略。用于串行和并行构建 Maven 的现有策略现在是 Builder 实现。现在其他人可以为构建项目实施其他策略。这是一个临时接口,可能会在不久的将来发生变化,但会在 Maven 4.0.0 中稳定下来。

持续交付友好版本 ( MNG-5576 )

一个简单的更改,以防止 Maven 发出有关具有属性表达式的版本的警告。版本中允许的属性表达式包括${revision}${changelist}${sha1}. 这些属性可以在外部设置,但最终会在 Maven 中创建一种机制,这些属性可以以标准方式注入。例如,您可能想要收集当前的 Git 修订版并将该值注入 ${sha1}。这绝不是持续交付的完整解决方案,而是朝着正确方向迈出的一步。

自定义生命周期映射 ( MNG-5581 )

LifecycleMappingDelegate接口的实现可以创建自定义生命周期。委托可以访问现有的生命周期,因此它可以创建现有生命周期的投影或创建全新的生命周期。一个简单的例子可能是创建一个名为的生命周期test-only,它可能只从标准生命周期中提取 Surefire 执行并执行它。

完整的发行说明

查看所有版本的完整发行说明