发行说明 – Maven 3.3.1

概述

Apache Maven 团队宣布发布 Maven 版本 3.3.1。新的 Maven 版本可供下载

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

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

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

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

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

所有版本的所有发行说明的完整列表可以在 Maven 项目的历史页面上找到。

详细发行说明

新的Maven 3.3.1 版本刚刚发布。让我们更深入地了解新功能/改进:

工具链

  • 在我们这个时代,能够使用不同的 JDK 供 Maven 本身使用并用于编译/测试您的生产代码变得越来越重要。这个概念以工具链的名称闻名,不幸的是它不是很知名。

  • 文件的处理toolchains.xml已经调整,处理settings.xml意味着它将在 ${maven.home}/conf/文件夹内以及文件夹内进行搜索${user.home}/.m2/

  • 为了更好地理解和作为文件的示例,toolchains.xml已将文件添加到Maven 发行版中。

  • Maven 已改进为在初始化期间toolchains.xml读取文件,而不是等到maven-toolchains-plugin读取它。

  • Maven 有一个新选项来处理全局工具链文件-gt file--global-toolchains file 本着全局设置文件MNG-3891的精神。

核心扩展

  • 核心扩展机制已得到改进,使其更易于使用。

  • 旧方法(直到 Maven 3.2.5)是创建一个包含扩展名的 jar(如果您有其他依赖项,则必须添加阴影)并将其手动放入${MAVEN_HOME}/lib/ext文件夹中。这意味着您必须更改 Maven 安装。结果是每个喜欢使用它的人都需要更改它的安装,并使开发人员的入职更加不便。另一种选择是通过 mvn -Dmaven.ext.class.path=extension.jar. 这样做的缺点是每次调用 Maven 时都会为 Maven 构建提供这些选项。也不是很方便。

  • 从现在开始,这可以更简单,更类似于 Maven 的方式来完成。因此,您可以定义如下所示的${maven.projectBasedir}/.mvn/extensions.xml文件:

<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
  <extension>
    <groupId/>
    <artifactId/>
    <version/>
  </extension>
</extensions>
  • groupId现在,您可以通过定义通常的 maven 坐标,来简单地使用扩展 artifactIdversion就像任何其他工件一样。此外,这些扩展的所有传递依赖项都将自动从您的存储库中下载。所以不再需要创建阴影工件了。

    另一个优点是该${maven.projectBasedir}/.mvn/ 目录位于您的 Maven 项目的根目录中,并且因此是您项目的一部分,这意味着您将把它与您的项目一起签入。因此,自动签出您的项目的每个人都可以使用这些扩展。

    有一点很重要,扩展将从 pluginRepository 中解析。如果您配置的 pluginRepository 与存储库不同,这很重要。

JVM 和命令行选项

  • 项目特定的 jvm 和命令行选项

  • 定义一组通用的调用 maven 命令行的选项真的很困难。通常这将通过将此选项放入脚本来解决,但现在可以通过定义 ${maven.projectBasedir}/.mvn/maven.config包含命令行配置选项的文件来简单地完成。例如像-T3 -U --fail-at-end. 所以你只需要通过使用mvn clean package而不是调用 mavenmvn -T3 -U --fail-at-end clean package并且不要错过-T3 -U --fail-at-end选项。位于多模块构建的根目录${maven.projectBasedir}/.mvn/maven.config 中的文件夹中。${maven.projectBasedir}/.mvn/此文件夹是项目的一部分,将签入您的版本控制。这导致每个签出项目的人都选择了该项目,而无需记住通过mvn -T3 -U --fail-at-end clean package而不是mvn clean package.

  • 在 Maven 中,在每个项目基础上定义 JVM 配置并不简单。基于环境变量MAVEN_OPTS和使用的现有机制${user.home}/.mavenrc是另一种选择,其缺点是不属于项目的一部分。

  • 从这个版本开始,您可以通过 ${maven.projectBasedir}/.mvn/jvm.config文件定义 JVM 配置,这意味着您可以在每个项目基础上定义构建选项。该文件将成为您项目的一部分,并将与您的项目一起签入。所以不再需要MAVEN_OPTS,.mavenrc文件。因此,例如,如果您将以下 JVM 选项放入${maven.projectBasedir}/.mvn/jvm.config文件中

-Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true
  • 您无需记住在不同配置中使用此选项MAVEN_OPTS或在不同配置之间切换。

从命令行调用插件目标

如果您直接从命令行调用插件,如下所示:

mvn exec:java

此处使用的配置可以通过使用执行 id 在您的 pom 中定义default-cli

<project...>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.3.2</version>
        <executions>
          <execution>
            <id>default-cli</id>
            <configuration>
              <mainClass>com.soebes.test.First</mainClass>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins> 
  </build>
</project>

从这个 Maven 版本开始,您现在可以为不同的命令执行定义多个配置,如下所示:

<project...>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.3.2</version>
        <executions>
          <execution>
            <id>default-cli</id>
            <configuration>
              <mainClass>com.soebes.test.First</mainClass>
            </configuration>
          </execution>
          <execution>
            <id>second-cli</id>
            <configuration>
              <mainClass>com.soebes.test.Second</mainClass>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins> 
  </build>
</project>

因此,如果您想使用带有执行 ID 的配置: second-cli可以这样做:

mvn exec:java@second-cli

因此,现在您可以为命令行执行定义多个配置。

上述发行说明最初由 Karl Heinz Marbaise 编写,后来迁移到 Apache Maven 项目