`
卒子99
  • 浏览: 73734 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

maven使用心得

    博客分类:
  • Java
阅读更多
升级到Maven3
Maven3已经发布很久了,对以前的版本也做了很多兼容,但是如果直接升级maven2到maven3,但发 现打包失败。提示找不到parent库。
在maven2中,打 包依赖于reactor插件,可以这个打包过程最重要的就是找到其它工程的类,并加入到当前环境的classpath。
但我们的定义的父pom不会产生任何 的jar。所以没必要让子工程依赖于库。可以采用以下方式依赖于父pom,也强烈要求各个应用改成这种配置

    <parent>
        <artifactId>wirelesscrm-all</artifactId>
        <groupId>com.taobao.wirelesscrm</groupId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../../all/pom.xml</relativePath>
</parent>

增加一个relativePath,这样可以直接引用父pom.xml。已经证明在maven2上正常的运行的。
裁剪反应堆
以前经常开发的几个工程都 比较小,习惯性直接在应用根目录下mvn clean pakcage,速度也能接受。但 在wirelesscrm中每次打包都比较慢,(可以想像下经常开发galaxy中的童 鞋了。。。。)
但其实只需要编译wirelesscrm里minicms相关工程。每次需要等很长时间,真是坑爹啊。研究了下,其实发现我们的打包 方式有点不是很合理。

合理的打包步骤如下:
mav clean install   将所有的工程的 库都安装到本地。
mav clean install –pl  $YOUR_PROJECT 只打包改动过的代码。


install是将包安装到本地的maven库,而package只会打好包,将包放置于应用的target目录 下。所以如果只编译部分工程,采用package是无法找到依赖工程的包。
在默认情况下,Maven会根据多 模块配置构建所有的模块,Maven还会根据模块间的依赖关系自动计算构建顺序,以确保被依赖的模块会先得以构 建。
所以对于模块较多的应用如galaxy,wirelesscrm这样的工程,应该尽量只编译开发的模块,可以大大的节约时间。

常用的裁剪反应堆的 命令有:

mvn clean install -rf biz/minicms  表 示从该模块恢复,也就是说选择从哪里开始构建,等于剪掉了完整反应堆的前面一部分。
mvn clean install -pl biz/minicms   表示手动选择需要构建的项目,项目间以逗号分隔。
mvn clean install -pl biz/minicms –am表 示同时构建所列模块依赖的其他模块。
mvn clean install -pl security-model-xml/ -amd,表示同时构建那些依赖于所列模块的模块
  
   PS:在maven3中提到已经不用使用install也可以裁剪反应堆,并能正确运行。但试过很多次,还是不能成功,这块还需要 多了解下。
并行编译
Maven 3的性能较之于Maven 2是有了很大的进步的,这体现在内存占用的减少 和构建时间的减少两个方面。特别是Maven 3引入的并 行构建特性,能够分析项目模块之间的依赖关系,然后并行地构建那些相互间没有依赖关系 的模块,从而充分利用多核CPU资源。这个功能试用了一下,在打包方速度方面还是有明显优势。
先不添加 图了


在maven3下,mvn –T 1C clean install。 即根据CPU分配分配线程数。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics