没有比人更高的山

maven中文教程——构建的生命周期0

maven的支持者在提及maven的优点的时候总会提到这么一点,那就是maven是有生命周期的,而ant没有,你需要手工的编写target,然后编写每个target中的任务。

其实在我看来这个是纠缠概念,所谓的maven生命周期实际上是构建过程的生命周期。在ant中你需要手动的设定文件夹的结果,告诉ant哪个是源代码文件夹、哪个是测试代码文件夹,哪个是目标文件夹等等,因此对于使用ant每个项目都有不一样的代码。因为maven已经将项目的文件夹结构固定好了,不用程序员再指定,所以就可以将编译、打包、部署等这样一些过程都可以做成自动化的,也就是所谓的maven的生命周期。

其实,完全可以自定义ant的target来实现maven所谓的“生命周期”这个概念。

构建即俗称building(team-building也是一种构建),我的理解是在java开发中构建组要是指编译源代码、打包、部署、运行这样一个完整的过程,很多时候这个过程被IDE封装成了一个run按钮,当你写完代码按下run的时候,IDE会将所有的事情做完,对于coder,这一系列过程是透明的。

那又会有同学要问了,既然IDE已经可以做这些事情了,而且不用我操心,我干嘛需要maven呢?一方面,在持续集成和自动化构建过程中显然不可能去用IDE封装好的这一套,这里非得使用ant或者maven不可;另一方面,maven的最核心功能并不是这个而是包依赖的管理。

maven中默认的生命周期阶段可以参考《maven权威指南》chapter10 构建生命周期,我们会常用的有这么一些,你可以使用“mvn 生命周期的阶段名称”这样的命令来用maven自动构建:

  1. validate 验证项目是否正确,以及所有为了完整构建必要的信息是否可用
  2. compile 编译项目的源代码
  3. test-compile 编译测试源代码
  4. test 运行单元测试
  5. package 将编译好的代码打包成可发布的格式,如war、jar、ear等
  6. install 安装包到本地仓库,以备其他项目可用
  7. deploy 将本地包发布到远程仓库(一般是开发团队搭建的maven私服)
  8. site 生成项目文档和报道,和apache的一般网站风格很相似,这一点太强大了

maven的生命周期其实是“约定优于配置”这个思想的最好体现,觉得ant脚本难写的朋友可以感受一下maven的强大。

VN:F [1.7.5_995]
Rating: 0.0/10 (0 votes cast)
VN:F [1.7.5_995]
Rating: 0 (from 0 votes)

maven中文教程——命令0

这是我第二遍学习maven了,决定写一些东西记录一下,以防像第一次学习之后全部忘光光的情况出现,另外也是告诉自己,必须坚持记录学习进展,不能荒废了这一片净土。

看到这个题目,有人会告诉我《Maven权威指南》,我看了一些,但是一开头就被“mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook”这样的命令吓到了,与其去记这么复杂的命令,我还不如回去用ant,最近apache不是又整出个ivy,也可以管理版本依赖么?简简单单,多好。直到我偶然浏览一篇springside论坛一篇帖子,里面写到:

“其实谁都有菜鸟的的阶段,不过我们要学习的话,不要总是看重运行结果,要学习整个的过程和细节。比如很多人都头痛的maven,就是一个学习的好机会,我第一次学习maven也是下载ss后才迫使自己学习的,当时也是隐隐的骂,觉得太费劲了。但是当你真正的做过之后才发现,很多时候我们讨厌的事物,恰巧是我们没有真正了解和操作前的误区。直言不讳地说,那些自称是菜鸟而不愿以使用maven的人很可能不是菜鸟,而是懒鸟。如果你是懒鸟,请暂时不要再研究springside了,因为影响你日后发展的主要原因很可能就是懒惰而不是技术。 ”

仔细想了一下,觉得很有道理,学习嘛,都有循序渐进的过程,一开始遇到问题很正常,如果不能坚持,永远学不到真正的东西。于是,从maven开始。

回头看这个命令mvn archetype:create(省略了后面的参数),其中archetype是一个插件(plugin)的名字,而create是这个插件的一个任务(task),这个插件都有哪些任务可以用mvn help:describe -Dplugin=archetype 这个命令来查看,同样,help是一个插件,describe是一个任务的名字,maven里面的参数传递采用“-D”这种Java用来设置系统属性的方式,mvn这个脚本只是把这个参数传递给java的类了。

同样如果需要查看help插件的详细信息,可以使用mvn help:describe -Dplugin=help,如果需要查看详细的参数信息,则需要再加上-Dfull参数,即mvn help:describe -Dplugin=archetype -Dfull=true

创建了一个项目之后,可以使用maven的其他命令来执行编译、构建、发布过程了,对于一些常用的命令,maven也有简写形式,如mvn compile:compile可以简写为mvn compile

常用的有这么一些:
mvn compile 编译项目源代码
mvn test-compile 编译测试代码
mvn test 运行测试
mvn package 打包应用
mvn install 将应用发布到本地仓库
mvn deploy 复制最终的包至远程仓库,共享给其它开发人员和项目供其他项目使用

上面的这些命令究竟对应着哪些插件的任务,可以参见《maven权威指南》Chapter 10.构建生命周期

VN:F [1.7.5_995]
Rating: 0.0/10 (0 votes cast)
VN:F [1.7.5_995]
Rating: 0 (from 0 votes)


Switch to our mobile site