`
AILIKES
  • 浏览: 183984 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Maven 2升级Maven 3

阅读更多

        在升级软件的时候,兼容性显然是首先要考虑的问题,如果原本在Maven 2下能成功构建的项目,在Maven 3下立刻就失败了,而且难以简单修复,那显然是不可接受的。 好在Maven用户大可打消这一顾虑,Maven 3自设计之初就一直考虑与Maven 2的兼容性,这不仅是指兼容Maven 2的核心,还包括大量的org.apache.maven.plugins与org.codehaus.mojo插件。虽然由于某些插件代码的特殊性,无法做到100%完全的兼容,但已经基本不会遇到问题了。

如果你还有担心,那可以先仔细阅读官方发布的Maven 3.x兼容性笔记Maven 3.x插件兼容性列表。这两份文档记录的兼容性问题主要涉及的是一些应当被弃用的特性,并且都给出了Maven 3下的解决方案。

改进性能

Maven 3的性能较之于Maven 2是有了很大的进步的,这体现在内存占用的减少和构建时间的减少两个方面。特别是Maven 3引入的并行构建特性,能够分析项目模块之间的依赖关系,然后并行地构建那些相互间没有依赖关系的模块,从而充分利用如今普遍的多核CPU资源。

以下两条命令分别表示用4个线程构建,以及根据CPU核数每个核分配1个线程进行构建:

$ mvn -T 4 clean install
$ mvn -T 1C clean install

Maven的提交者之一Anders Hammar在其文章迁移到Maven 3的十大理由中介绍了一个简单的实验,分别用Maven 2.2.1,Maven 3.0.2(单线程),和Maven 3.0.2(4线程)构建同样的包含32个模块的Maven源代码,得到了如下的结果:

Table 1. 用"mvn package"构建Maven SCM trunk(32个模块)
  时间/内存
Maven 2.2.1 3:20/53M
Maven 3.0.2(单线程) 3:15/27M
Maven 3.0.2(4线程) 2:26/28M

 

可以看到Maven 3下内存的占用减少了近一半!而开启并行构建后,时间的节省也是非常可观的。而项目越大,这种性能的改进就越为明显。如果你的开发环境没有充裕的内存,而你的项目又非常大,那光内存节省这一条就足以让你立刻转向Maven 3了。

 改进模块间依赖解析

Maven 2中一个比较令人头疼的问题是,当你在构建一个多模块项目的时候,为了使前面的模块能在后面模块classpath中生效,你必须将其install到本地仓库中之后,Maven才能解析使用。几乎所有Maven 2用户或早或晚都遇到了这个困惑,“为什么我已经 mvn clean package 了模块A,可构建模块B的时候还是无法看到A的更新呢?”这个问题在Maven 3中得以解决了,在构建多模块项目的时候,Maven 3会从反应堆(reactor)中解析模块间依赖,也就是说只要模块A执行了package,那模块B就能根据相对路径找到并解析使用A生成的jar文件。

提倡最佳实践

刚从Maven 2转到Maven 3的用户很可能会发现执行构建的时候命令行会打印很多如下的警告:

[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-javadoc-plugin is missing. 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.

大部分如下的警告是因为用户在配置插件或者依赖的时候没有指定版本,无法保证构建的可重现性,从而为构建引入了潜在的风险。这样的警告是一种既保持兼容性,又提倡最佳实践而做出的权衡。类似的改进还包括弃用profile.xml特性、明确分离项目依赖和插件依赖等等。

改进日志输出

这是一个很微小的改进,却突显了Maven开发者对Maven用户的关怀,我个人非常喜欢这点改进。简单得来说,Maven 3的构建日志更容易阅读了。插件的输出之间都有空行隔开,每个被运行插件的版本、目标、以及所处模块的artifactId都得以清晰显示。当构建出现错误的时候,这样的输出能帮助用户更快地找到问题所在。

 站点(注意!)

站点这一特性是Maven 2的核心,但是在Maven 3中,该特性被完全移到了maven-site-plugin中,这就导致了相关的配置也需要转移。Maven 2中与站点相关的配置是在POM的reporting元素下的,如:

<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.7</version>
      </plugin>
    </plugins>
  </reporting>
</project>

在Maven 3中,所有站点相关的配置都应该出现在maven-site-plugin下面:

<project>
 ...
 <build>
   ...
   <plugins>
     ...
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-site-plugin</artifactId>
       <version>3.0-beta-3</version>
       <configuration>
         <reportPlugins>
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-javadoc-plugin</artifactId>
             <version>2.7</version>
           </plugin>
         </reportPlugins>
       </configuration>
     </plugin>
   </plugins>
 </build>
</project>

小结与致谢

本文从兼容性、新特性、性能改进、以及重要细节等方面全面介绍了Maven 3。Maven 3是Maven从成熟走向巅峰的标志,如果你还未升级,我强烈建议你至少尝试一下,Maven的安装是非常简单的,只需要下载一个zip包、解压、然后设置简单的环境变量即可,马上去下载吧

分享到:
评论

相关推荐

    maven 工程升级版本步骤

    ### Maven工程升级版本步骤 在软件开发过程中,随着项目的不断迭代和需求的变化,对Maven项目进行版本升级是一项常见的操作。下面将详细介绍如何通过一系列步骤完成Maven项目的版本升级。 #### 步骤一:更新Parent...

    Maven自动升级版本号并打包上传的脚本

    2. Maven的版本升级: 使用`versions-maven-plugin`插件,我们可以方便地更新项目及其依赖的版本号。例如,命令`mvn versions:set -DnewVersion=1.0.1-SNAPSHOT`将项目版本号改为1.0.1-SNAPSHOT。之后,需要提交`...

    Maven3实战笔记.pdf

    Maven3作为该工具的升级版本,引入了更多特性和改进,比如更好的多模块项目构建支持、更强大的依赖管理功能以及改进的仓库管理等。 描述部分简单重复了标题内容,没有提供额外信息。 标签“maven pdf 实战”表明该...

    Maven2 配置指南(java 项目管理之路)

    ### Maven2配置指南知识点概述 #### 一、Maven简介 1. **Maven是什么?** - **定义**:Maven是Apache软件基金会支持的一个开源项目构建管理系统。 - **核心价值**:通过约定优于配置的原则简化了项目的构建过程...

    Maven2 的新特性.7z

    POM是Maven的核心对象模型,在Maven2中POM已由project.xml转移到pom.xml中使用,版本也由3升级为4。对于项目,一般只需要pom.xml就行了。 在Maven2中不需要也不提倡使用maven.xml,原因如下: • plugin的易用性的...

    mavenSSH+Ajax2

    Ajax 2 是对第一代Ajax技术的升级,它进一步增强了Web页面的动态性和交互性,无需刷新整个页面即可实现数据的异步更新。 1. **异步通信**:Ajax 2 使用XMLHttpRequest对象发送异步请求,这意味着后台数据处理时,...

    Maven兼容jdk1.7版本

    然而,"Maven 3.0.5"特别强调了与JDK 1.7的兼容性,这意味着使用此版本的Maven可以顺利处理基于Java 7的项目,无需升级JDK,这对于那些无法或不想升级JDK的团队来说是理想的选择。 **Maven 3.0.5特性**: 1. **改进...

    apache-maven-3.6.0

    为了保持Maven的最新状态,开发者应定期检查新版本并进行升级。可以使用`mvn -U clean install`强制Maven从远程仓库获取最新的依赖。 总的来说,Apache Maven 3.6.0作为一个高效、强大的构建工具,极大地简化了Java...

    apache-maven-3.5.0.rar

    2. **依赖管理**:Maven通过中央仓库管理所有项目的依赖,只需在POM文件中声明依赖,Maven就能自动下载并管理这些依赖。这极大地简化了项目的构建过程,避免了手动管理jar文件的困扰。 3. **插件系统**:Maven的...

    apache-maven-3.3.3

    2. **构建生命周期**:Maven 提供了一个预定义的构建生命周期,包括clean、default和site三个阶段,每个阶段包含多个目标(或称为阶段),如compile用于编译源代码,test用于运行测试,package用于打包应用,install...

    maven v3.5.0版本

    2. **插件管理和优化**: Maven 3.5.0对插件管理系统进行了改进,增强了对插件版本的控制,避免了因插件版本冲突导致的问题。此外,它还支持了插件自动升级提示,帮助开发者及时更新到最新稳定版本。 3. **依赖...

    maven3.6.3.zip

    3. **增强的插件管理**:Maven 3.6.3对插件管理机制进行了改进,支持更好的插件版本控制和自动升级,使得开发者可以更灵活地使用和管理插件。 4. **POM处理优化**:对POM解析和处理进行了优化,提升了处理大型POM...

    maven配置操作文档

    要升级Maven,只需下载新版本,解压到同一目录,并更新`M2_HOME`环境变量指向新版本的路径。降级过程相同,只是指向旧版本的路径。 ### Eclipse配置Maven 在Eclipse集成开发环境中配置Maven,你需要: 1. 打开...

    maven的安装文档和myeclipse中maven的插件安装

    6. **Maven 版本升级**:若要升级 Maven,只需更改 `M2_HOME` 环境变量的值为新版本的 Maven 目录即可。 7. **配置 settings.xml**:在 `%USERPROFILE%\.m2\` 目录下(Windows XP 中通常是 `C:\Documents and ...

    maven33 2.7.10 maven库

    - 定期升级Maven到最新版本,以利用最新的功能和修复的安全问题。 综上所述,Maven 3.3.2作为Maven的一个稳定版本,为Java开发者提供了强大且便捷的项目管理工具。通过理解和掌握Maven的工作原理及使用方法,可以...

    基于Maven Struts2 简单应用开发

    Struts2则是Struts1的升级版,是一个基于Apache Jakarta OGNL(Object-Graph Navigation Language)表达式语言的MVC框架。它提供了更灵活的拦截器模型,增强了异常处理和国际化支持。Struts2的核心在于Action类,它...

    apache-maven-3.8.4.zip

    3. **配置环境变量**:设置"M2_HOME"环境变量指向Maven的安装目录,并将"Maven的bin"目录添加到PATH环境变量中,这样可以在命令行中直接运行Maven命令。 4. **验证安装**:打开命令行终端,输入`mvn -v`或`mvn --...

Global site tag (gtag.js) - Google Analytics