首页 > 代码库 > Gradle用户指南(章7:java插件)

Gradle用户指南(章7:java插件)

  1. Java插件

    如我们所见,gradle是一个通用的构建工具。它可以构建你关心并实现的构建脚本。它是开箱即用的,然而,它不会构建任何东西除非你在你的构建脚本中添加代码。

    大多数java项目都有非常相似的基础操作:编译java源文件,运行单元测试,和创建包含类文件的jar包。如果你不想为每个项目添加这些操作代码,那是非常好的。Gradle用插件解决这个问题。这个插件通常通过以某种方式配置你的项目来扩展它,通过添加一系列预配置的任务来做一些有用的东西。Gradle附带大量的附件,当然,你也可以编写自己的附件并分享给他人。其中一个就是java插件。这个插件给你的项目添加了一些任务:编译、测试你的java源文件并生成jar包。

    Java插件是基于约定的。这意味插件在项目的许多方面都定义了默认值,例如java源文件所在的地方。如果在你的项目中遵守这个约定,则一般不需要大量修改你的构建脚本就可以有一个可用的构建。Gradle允许定制插件,如果你不想或者不能遵守约定。事实上,因为对java项目的支持是通过插件实现的,如果你不想,你可以不使用插件来构建一个项目。

    我们将在后面的章节中深入了解更多java插件例子,依赖管理,多项目的内容。在本章中,我们只想给你的一个初步的概念:如何使用java插件构建一个java项目。

  2. 一个基本的java项目

    让我们来看一个简单的例子。使用java插件,添加以下到你的构建文件中:

    这是你所有需要的来定义一个java项目。这将java插件添加到你的项目中,它将添加需要任务到你的项目中。

    Gradle将找到你生产环境下的源代码?src/main/java?和你的测试源代码src/test/java。此外,?src/main/resources下的文件都将被包含在类路径中用于运行测试。所有的输出文件夹都将创建在构建目录下,jar被包含在build/libs目录中。

    Java插件添加许多任务到你的项目中。然而你只需要少数任务就可以构建项目。我们最常用的任务是构建任务build task,它对你的项目做了一个完整的构建。当你执行 gradle build ,gradle将编译并测试你的代码,创建一个jar包包含你的主要类和资源。

    其他一些有用的任务:

    Clean

    删除构建目录,删除所有构建文件。

    Assemble

    代码编译并打包,不运行单元测试。其他插件也可以添加更多操作到这个任务。例如,如果你使用war插件,这个任务也能在你的项目中构建war包。

    Check

    编译并测试代码。其他插件可以添加更多检查到这个任务。如你使用checkstyle插件,这个任务将对你的代码运行checkstyle检查。

    通常,一个java项目将有一些外部依赖jar包。如果在项目中使用这些jar包,你需要告诉gradle如何找到他们。Gradle构件如jar,都被放置在一个仓库中。这个项目可以用来抓取项目依赖项或者发布项目构件,或者兼而有之。这个例子中,我们将使用公共的maven库。

    让我们添加一些依赖项。这里我们声明我们的生产有一个编译时类依赖于commons collections,和测试类依赖于junit

    你可以在第八章:依赖关系管理中找到更多。

    定制项目

    Java插件添加一系列属性到你的项目中。这些属性通常在项目开始处赋予默认值。如果他们不适合,我们能非常方便的改变这些值。让我们看下这些示例。这里我们将为项目指定版本号,与我们在源文件中写的版本号一起。我们还将添加一些属性到mainfest中。

    Java插件能添加定期任务,就像在构建文件中声明的那样。这意味着你可以使用前面章节展示的任何机制来定制这些任务。例如,你可以定义这些任务的性质,将行为添加到任务,改变任务依赖关系的任务,或者完全替换一个任务。在例子中,我们将配置测试任务,这类型的?Test,执行测试时添加一个系统属性:

    发布jar文件

    通常我们需要发布jar包。要做到这一点,你需要告诉gradle在哪里发布这些jar文件。在gradle,构件发布到仓库中。示例中,我们发布到本地仓库中。你也可以发布到远程位置或者多个位置。

    发布jar包,运行 gradle uploadArchives

    创建eclipse项目

    创建eclipse-specific特性描述符文件,如.project,你需要添加另一个插件到你的构建文件中。

    现在执行gradle eclipse 命令,生成eclipse项目文件。你可以找到更多关于eclipse38?Eclipse插件

    总结

    这里是完整的构建文件示例:

  3. 多项目构建

    现在让我们来看下典型的多项目构建。以下是项目的布局:

    这里我们拥有4个项目。项目api产生一个jar文件发送至客户提供xml网络服务的java客户机。项目webservice是一个返回xml的webapp。项目shared包含api和webservice。项目services/shared依赖于shared。

    定义一个多项目构建

    定义一个多项目构建,你需要创建一个设置文件settings file。这个设置文件在源代码树的根目录,并指定包含哪些项目构建。它必须被命名为settings.gradle。对于本例,我们使用一个简单的分层布局。下面是对应的设置文件:

    常见配置

    对于大多数多项目构建,有一些常见的配置项。在示例中,我们在根项目中使用常见的配置,使用技术configuration injection配置注入。这里,根项目就像一个容器,子项目方法遍历这个容器—在这个实例中的项目—然后注入配置。这样我们可以很容易的定义清单对所有的档案内容和一些常见的依赖关系。

    请注意,我们示例中的java插件适用于每一个子项目。这意味着我们在前一节看到的任务和配置属性是可用的。So,你可以在根目录中使用gradle build编译、测试打包源文件。

    还要注意,这些插件只是运用在子项目中,所以在根项目中找不到你期望的源文件,只有在子项目中才能找到。

    项目间的依赖关系

    你可以在相同的项目中添加项目间的依赖关系。例如,一个jar包是用来编译另一个项目的。在api构建,我们定义其依赖于shared。由于这种依赖性,gradle将确保项目shraed总在项目api之前。

    创建一个分布?

    我们创建一个分布,被分享到客户端:

  4. 下一章是什么?

    在本章中你已经看到你通常建立一个java项目需要做的任务。本章并不详尽,对java项目你还可以做的更多。你可以找到更多java插件?23,?Java插件?你也可以找到更多的java项目示例在gradle分布samples/java目录中

Gradle用户指南(章7:java插件)