首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

在 Eclipse 上利用 gradle 构建系统【转】

2012-09-12 
在 Eclipse 下利用 gradle 构建系统【转】然后新建一个 HelloWorld 类,我们下面就是将这个项目通过 Ant 来编

在 Eclipse 下利用 gradle 构建系统【转】

然后新建一个 HelloWorld 类,我们下面就是将这个项目通过 Ant 来编译,打包,类的代码列表如清单 1 所示:


清单 1. HelloWorld 类

?

熟悉 ant 的同学们对于上面的脚本应该很容易看明白,这里就不详细解释了,主要功能就是把这个工程编译然后打成 jar 和 war 包。到目前为止 ant_project 的目录结构如图 2 所示:


图 2. ant_project 工程目录结构
在 Eclipse 上利用 gradle 构建系统【转】

运行 ant 脚本。

然后新建一个 java bean 名为 HelloWorld 内容和上面的一样,可以参考 ant_project。为了实现编译,打包功能,我们需要新建一个名为 build.gradle 的文件。文件内容见清单 3 所示:


清单 3. build.gradle 内容

这里需要注意一点的是,项目包的结构最好是按照 Gradle 期望的来建立,当然也可以通过配置来改变。下面我们来运行下 build.gradle 文件。运行 cmd 命令,进入 gradle_project 项目路径下,然后运行 gradle build 命令,命令显示信息如清单 5 所示。


清单 5. build.gradle 运行显示信息

?

然后我们用 ant javadoc 命令来运行,即可生成 javadoc。那么我们利用 Gradle 是怎样来生成 javadoc 的呢,都需要做那些额外的工作呢? build.gradle 文件是否需要修改呢?我们的回答是,不用,什么都不用修改,什么都不用做,只需利用 gradle javadoc 命令,即可生成我们期望的 javadoc。通常我们新建一个项目,.classpath 文件的内容如清单 9 所示:


清单 9. .classpath 文件内容

?

通过上面的知识我们知道,Gradle 期望的目录结构和自动生成的是有些差别的,比如源码路径,编译后的文件放置目录等,那么我们能不能通过 Gradle 命令来统一一下呢,使原项目结构与 Gradle 期望的一致,以免开发者将代码放置到了错误的目录结构下,那样 Gradle 是不管理它们的。下面我们就通过一个简单的方法来实现上面的需求,首先我们来简单修改下 build.gradle 文件,添加 apply plugin: 'eclipse'这么一行,然后我们使用命令 gradle eclipse 即可。.classpath 文件的变化如清单 9 所示。


清单 9. 修改后的 .classpath 文件内容

?

War 包是我们经常要用到的,上面我们利用 Ant 脚本生成过 war 包,那么 Gradle 又是怎样来生成 war 包的呢?经过上面的学习或许你已经猜出来了,需要增加一个 plugin,完全正确,只需要将 apply plugin: 'war' 这一行加入到 build.gradle 文件中,然后运行 gradle War 命令即可,简单的简直要命,是不是,呵呵!

?

那么 Gradle 又是怎样来做的呢?通过上面的知识的学习,你是否有一个大概的思路呢?假如我们现在有一个 java 类叫 HelloWorldTest,这个类中引用了 junit 这个 jar 包中的类,这时候我们用 Gradle 要怎样来编译这个类呢?首先我们新建一个目录叫 libs,这个目录就是放置项目所依赖的所有 jar 包,当然包括 HelloWorldTest 类所依赖的 junit-4.4.jar 包,然后我们要修改下 build.gradle 文件,增加内容见清单 12。


清单 12. 工程所依赖 jar 包添加方法

?

我们知道 copy 任务中有很多属性,这里我们就不一一列出了,我们还是主要看下 Gradle 是如何来实现这些功能的。

?

然后我们使用命令 gradle – q hello 运行一下,运行结果如清单 20 所示。


清单 20. 命令运行结果

 E:\ws_IBM\gradle_multiProject>gradle -q hello  I'm gradle_multiProject  I'm sub_projectone 

?

我们会发现,这个命令将主工程和子工程的名字都打印出来了,为什么会这样呢?我想你一定猜对了,因为我们在 build.gradle 文件中使用了 project() 方法,方法内传入的是子工程的名称,如果我们子工程不止一个,那么我们又该怎样来调用呢?这时候我们只需要调用另一个方法 allprojects 即可,注意 allprojects 方法是不需要传入参数的,它返回的是当前工程和当前工程下面的所有子工程的列表。上面演示的内容其实我们不经常用到的,这里简单的介绍下就是为了说明 gradle 给我们提供了好多方法来供我们调用,在多工程的环境下我们可以灵活的使用它们来达到我们的要求,下面我们就步入正题来看看在多工程情况下,gradle 是如何来编译,打包各自工程的。这里我们添加些内容到 build.gradle 文件,内容见清单 21。


清单 21. 添加到 build.gradle 文件中的内容

 subprojects{  apply plugin: 'java' } 

?

然后我们用命令 gradle build,发现主工程下面的所有子工程都新增了一个 build 文件夹,这个文件夹下包含编译生成的 class 文件和 jar 文件,而主工程的 src 下的代码却没有被编译,打包。那么我们怎样做能让主工程和子工程同时被编译,打包呢?方法很简单,我们只需要在 build.gradle 文件中增加 apply plugin: 'java' 这么一行代码,现在完整的 build.gradle 内容见清单 22。


清单 22. 完整的 build.gradle 文件内容

 apply plugin: 'java' subprojects{  apply plugin: 'java' } 

?

是不是很难想象,就这么几行代码就完成了将所有工程中的代码都编译了并且都打成了 jar 文件。有的朋友会问了,如果子工程与主工程他们打成的包不一样,有的是需要 jar 包,有的需要打成 war 包等等,这样的需求我们该怎样做呢,很简单我们只需要在需要打成 war 包的工程下面新建立个 build.gradle 文件,该文件内容为 apply plugin: 'war',然后我们我们在主工程目录下使用 gradle build 命令即可生成我们需要的 war 包了,Gradle 就是使用这种方法来满足那种差异性的需求的。

使用 Ant 的朋友们一定会深有感触的吧!也许有些朋友会有反面的一些声音,尤其对那些 Ant 的热爱者们,一定会说,Ant 如果你使用的好,封装的好一样可以很简洁并且也能达到这个效果的,的确是这样的,Gradle 只不过是把我们经常要使用的一些功能项给封装成了方法,然后我们调用这些方法即可了,再说了,Gradle 调用 Ant 脚本也是可以的,如果你一定要用 Ant, 那么你用 Gradle 来组织一下逻辑也是不错的选择。下面我们简单看下在 Gradle 中式怎样来调用 Ant 脚本的。

Gradle 中调用 Ant 脚本

首先我们建立 Ant 文件 build.xml, 文件详细内容见清单 23.


清单 23. build.xml 文件内容

 <project>     <target name="hello">         <echo>Hello, from Ant</echo>     </target>  </project> 

?

然后我们在建立个 build.gradle 文件,文件详细内容见清单 24。


清单 24. build.gradle 文件内容

 ant.importBuild 'build.xml'

?

简单吧,一句话的事情而已,呵呵。然后我们使用 gradle hello 命令来看下结果,结果见清单 25。


清单 25. Gradle 调用 Ant 文件的运行结果

 E:\gdcc\me\gradle-0.9-preview-1\samples\userguide\ant\hello>gradle hello  :hello  [ant:echo] Hello, from Ant  BUILD SUCCESSFUL  Total time: 9.734 secs 

?

可以看出,的确调用的是 Ant 的 build.xml 文件吧。

?

热点排行