Ant的主要优点在于对构建过程的控制上。
在对DSL(Domain Specific Languages)的热情持续高涨之时,通常的想法是设计一套能够解决特定领域问题的语言。在构建这方面,DSL的一个成功案例就是Gradle。
我们写一段构建脚本来完成从编译、静态检查、单元测试到最终打Jar包的过程。我们分别使用三个框架(Ant,Maven和Gradle)来完成这件事情,比较一下语法。通过比较每一个任务的代码,我们能够对差异有一个更好的理解,并对选择构建工具做出一个周全的决策。
事有先后,如果你自己按照本文来学习样例,需要安装Ant,Ivy,Maven和Gradle,请根据相应工具的安装指导进行操作。你也可以不用自己跑样例,也统统不用安装,代码片段应该足够让你明白这些工具是如何工作的。
代码库 https://github.com/vfarcic/JavaBuildTools包含有Java代码(两个简单的类和测试代码),checkstyle配置文件和Ant,Ivy,Maven以及Gradle的配置文件。
先从Ant带着Ivy开始
Ivy的依赖需要在ivy.xml中指定。我们的例子很简单,只需要依赖JUnit和Hamcrest。
ivy.xml
现在我们来创建Ant脚本,任务只是编译一个Jar文件。最终文件是下面的build.xml。
build.xml
首先,我们设置了几个属性,然后是一个接一个的task。我们用Ivy来处理依赖,清理,编译和打包,这是几乎所有的Java项目都会进行的task,配置有很多。
ant jar
4.0.0
com.technologyconversations
java-build-tools
jar
1.0
junit
junit
4.11
org.hamcrest
hamcrest-all
1.3
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
通过执行下面的命令来运行Maven goal生成Jar文件。
mvn package
主要的区别在于Maven不需要指定执行的操作。我们没有创建task,而是设置了一些参数(有哪些依赖,用哪些插件...). Maven推行使用约定并提供了开箱即用的goals。Ant和Maven的XML文件都会随时间而变大,为了说明这一点,我们加入CheckStyle,FindBugs和PMD插件来进行静态检查,三者是Java项目中使用很普遍的的工具。我们希望将所有静态检查的执行以及单元测试一起作为一个单独的target
Verify。当然我们还应该指定自定义的checkstyle配置文件的路径并且确保错误时能够提示。更新后的Maven代码如下:
pom.xml
org.apache.maven.plugins
maven-checkstyle-plugin
2.12.1
config/checkstyle/checkstyle.xml
true
true
check
org.codehaus.mojo
findbugs-maven-plugin
2.5.4
check
org.apache.maven.plugins
maven-pmd-plugin
3.1
check
通过执行下面的命令来运行Maven goal,包括单元测试,静态检查,如CheckStyle,FindBugs和PMD。
mvn verify
我们需要写很多XML来进行基本的常用的任务。在实际项目中有更多的依赖和task,Maven的pom.xml很容易就有成百上千行的配置。
apply plugin: 'java'
apply plugin: 'checkstyle'
apply plugin: 'findbugs'
apply plugin: 'pmd'
version = '1.0'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
testCompile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3'
}
Gradle不仅代码少了很多,对于熟悉的人来说,比Maven要更容易理解,而且它还包括很多Maven代码没有覆盖的有用的task。请执行下面的命令来得到Gradle在当前配置下能够支持的task列表。
gradle tasks --all
apply plugin: 'java'
简单的这一行增加了20多个可用的任务.
原文链接:http://technologyconversations.com/2014/06/18/build-tools/