(2.2.7)构建工具Maven的选择

时间:2021-02-25 04:37:41

一个新的Java项目行将开始,自动化是要纳入考量的一项重要工作,于是,构建工具的选型提上了日程。

固然,我可以不明就里从Java世界Ant和Maven两大天王中,择一从之,但稍微整理一下内心的需要,也不会糊涂僧断糊涂案。作为构建工具,基本构建功能自然是必备的,此外,我还有一些非分之想。

在这个Convention over Configuration的年代,要是每次都从头开始手工打造一切,出门都不好意思和人打招呼。Maven给Java世界打了一个很好的样,它的目录结构有约定,就是那个src/main/java⋯⋯,它的构建过程有约定,就是编译、测试、打包的那套东西。感谢Maven,Java世界的很多构建工具都遵循了同样的约定,这让我有机会在不改变目录结构的情况下,尝试各种构建工具。你知道我在说什么了,Ant稍微有些原始。

依赖管理不可或缺,看看人家Ruby,gem install以及bundle install。其实,从Ruby世界得到的信息是,这不是构建工具的一亩三分地,但谁让它跟构建紧密相关,每次想到,我要自己这找一个jar包,那找一个jar包,就纠结得我痛苦万分。幸好,Maven拯救了Java程序员,只要在脚本里定义好自己需要的库,于是,一大批jar就从天而降了。有了Maven的基础设施,许多构建工具也借得东风,比如ivy,它就是定义自己的需求,拿Maven的jar包。

划分工程。把所有代码都写在一个工程里,生成一个jar/war/ear包,N年前我是这么做的。当我为一个把所有一切都混杂一起的项目编写web service时,我被恶心得够呛。于是,我决定,我的下一个Java项目一定要把domain和web分开,这样,别人给它写web service时,根本不必理会web层的存在,我相信,至少这一点上,他会感谢我的,也许这个人就是未来的我。

环境区分,去过Rails环境,我才知道,把不同的配置分开是多么幸福的一件事。在开发环境下,我可以用一套配置,在部署环境下,我用另外一套配置,楚河汉界,我就不必费心在代码里想各种各样奇怪的组合。

IDE集成。如果你用过maven idea:idea,你就知道我说什么了。通过构建工具,我可以生成对应的IDE工程,直接在IDE里打开,然后就开始写代码了。曾几何时,开始写代码时,我需要花上小半天时间配我的IDE,尤其是我想有多个工程的时候。

最重要的是,扩展能力,当我希望表现的个性一点时,我可以。从前面的种种,你可以看出我多么喜欢Maven了,但Maven就是死在这里了。我非常同意Maven是能够扩展的,但它着实不是给老百姓扩展的。要扩展它,我必须成为Maven的专家,对于Maven精心设计的插件机制有足够的了解。可惜,这不是我的努力方向,我还是喜欢一些更符合直觉的东西。

总结一下我的需求,说白了,就是能够快速开始,不把自己玩死。

有了需求,就不难发现,天王固然是天王,但毕竟老了。一些新星已然崭露头角,如果你已厌倦Java世界整日与XML为伍的生活,还有个好消息,新星们选择了另外的表达方式。假如你喜欢ruby,buildr是个不错的选择,groovy若是你的最爱,那就去找gradle吧!

新星毕竟是新星,遇到问题时,比起可以随手找到的Ant Task和Maven Plugin,新星们的解决方案寥寥无几,当然一个还好的消息是,新星们都可以集成天王的资产,比如调用Ant Task,这会让我们不安的内心稍稍平静一些。