发行说明 – Maven 3.3.1
概述
Apache Maven 团队宣布发布 Maven 版本 3.3.1。新的 Maven 版本可供下载。
Maven 是一个软件项目管理和理解工具。基于项目对象模型 (POM) 的概念,Maven 可以从一个中心位置管理项目的构建、报告和文档。
Maven 3 旨在确保与 Maven 2 的向后兼容性,提高可用性,提高性能,允许安全嵌入,并为实现许多高要求的特性铺平道路。
核心版本独立于可用的插件。插件的进一步版本将单独制作。有关更多信息,请参阅插件列表。
我们希望您喜欢使用 Maven!如果您有任何问题,请咨询:
- 网站:http ://maven.apache.org/
- maven 用户邮件列表:http ://maven.apache.org/mailing-lists.html
- 参考文档:http ://maven.apache.org/ref/3.3.1/
完整的变更列表可以在我们的问题管理系统中找到。
所有版本的所有发行说明的完整列表可以在 Maven 项目的历史页面上找到。
详细发行说明
新的Maven 3.3.1 版本刚刚发布。让我们更深入地了解新功能/改进:
- 首先也是最重要的是Maven 3.3.1 需要 JDK 1.7。
工具链
-
在我们这个时代,能够使用不同的 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 坐标,来简单地使用扩展artifactId
,version
就像任何其他工件一样。此外,这些扩展的所有传递依赖项都将自动从您的存储库中下载。所以不再需要创建阴影工件了。另一个优点是该
${maven.projectBasedir}/.mvn/
目录位于您的 Maven 项目的根目录中,并且因此是您项目的一部分,这意味着您将把它与您的项目一起签入。因此,自动签出您的项目的每个人都可以使用这些扩展。有一点很重要,扩展将从 pluginRepository 中解析。如果您配置的 pluginRepository 与存储库不同,这很重要。
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
因此,现在您可以为命令行执行定义多个配置。
- Maven 团队终于决定在启动脚本中放弃对 Win9x 的支持 。是的。