本章介绍了命令行的一些基本功能.正如在前面的章节里你所见到的调用 gradle 命令来运行一个构建.
了解更多关于War plugin和Jetty plugin的应用请参阅Chapter 26,The War Plugin以及Chapter 28,The Jetty Plugin.你可以在发行包的samples/webApplication下找到更多示例.
这一章描述了一个非常简单的 Groovy 项目. 通常, 一个真正的项目要比这个复杂的多. 因为 Groovy 项目是一个 Java 项目, 任何你可以对 Java 项目做的配置也可以对 Groovy 项目做.Chapter 24,The Groovy Plugin有更加详细的描述, 你也可以在 samples/groovy 目录里找到更多的例子.
构建 Groovy 项目时, 你需要使用 Groovy plugin (Groovy插件). 这个插件扩展了 Java 插件, 加入了编译 Groovy 的依赖. 你的项目可以包含 Groovy 的源代码, Java 源代码, 或者它们的混合.在其他方面,一个Groovy项目与Java项目是相同的,就像我们在Chapter 7, Java Quickstart见到的一样.
依赖配置也可以用来发布文件[3]. 我们称这些文件publication artifacts, 或者就叫 artifacts.插件可以很好的定义一个项目的 artifacts, 所以你并不需要做一些特别的工作来让 Gradle 需要发布什么. 你可以通过在 uploadArchives 任务里加入仓库来完成. 下面是一个发布远程 Ivy 库的例子:例子 8.8. 发布一个 Ivy 库build.
Gradle 是怎样找到那些外部依赖的文件的呢? Gradle 会在一个repository(仓库)里找这些文件. 仓库其实就是文件的集合, 通过 group, name 和 version 整理分类. Gradle 能解析好几种不同的仓库形式, 比如 Maven 和 Ivy, 同时可以理解各种进入仓库的方法, 比如使用本地文件系统或者 HTTP.默认地, Gradle 不提前定义任何仓库. 在使用外部依赖之前, 你需要自己至少定义一个库.
你可以声明许多种依赖. 其中一种是external dependency(外部依赖). 这是一种在当前构建之外的一种依赖, 它被存放在远程或本地的仓库里, 比如 Maven 的库, 或者 Ivy 库, 甚至是一个本地的目录.下面的例子讲展示如何加入外部依赖例子 8.2. 定义一个外部依赖build.gradledependencies { compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.
在 Gradle 里, 依赖可以组合成configurations(配置). 一个配置简单地说就是一系列的依赖. 我们称它们为(dependency configuration)依赖配置. 你可以使用它们声明项目的外部依赖. 正如我们将在后面看到, 它们也被用来声明项目的发布.Java 插件定义了许多标准的配置. 下面列出了一些, 你也可以在[Table 23.5, “Java 插件 - 依赖配置”](Table 23.
让我们看一下一些依赖的声明. 下面是一个基础的构建脚本:例子 8.1. 声明依赖build.gradleapply plugin: 'java'repositories { mavenCentral()}dependencies { compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final' testCompile group: 'junit', name: 'junit', version: '4.+'}这里发生了什么?
粗略的讲, 依赖管理由两部分组成. 首先, Gradle 需要了解你的项目需要构建或运行的东西, 以便找到它们. 我们称这些传入的文件为项目的 dependencies(依赖项). 其次, Gradle 需要构建并上传你的项目产生的东西. 我们称这些传出的项目文件为 publications(发布项). 让我们来看看这两条的详细信息:大多数项目都不是完全独立的. 它们需要其它项目进行编译或测试等等.
什么是依赖管理声明你的依赖依赖配置外部的依赖仓库发布 artifacts
你可以在同一个构建里加入项目之间的依赖, 举个例子, 一个项目的 JAR 文件被用来编译另外一个项目. 在 api 构建文件里我们将加入一个由 shared 项目产生的 JAR 文件的依赖. 由于这个依赖, Gradle 将确保 shared 项目总是在 api 之前被构建.Example 7.13. 多项目构建 - 项目之间的依赖api/build.gradledependencies { compile project(':shared')}
对于绝大多数多项目构建, 有一些配置对所有项目都是常见的或者说是通用的. 在我们的例子里, 我们将在根项目里定义一个这样的通用配置, 使用一种叫做配置注入的技术 (configuration injection). 这里, 根项目就像一个容器, subprojects 方法遍历这个容器的所有元素并且注入指定的配置 . 通过这种方法, 我们可以很容易的定义所有档案和通用依赖的内容清单:Example 7.12.
下面是一个完整的构建文件的样本:Example 7.9. Java 例子 - 完整的构建文件build.gradleapply plugin: 'java'apply plugin: 'eclipse'sourceCompatibility = 1.5version = '1.
为了把你的项目导入到 Eclipse, 你需要加入另外一个插件:Example 7.8. Eclipse 插件build.gradleapply plugin: 'eclipse'现在运行 gradle eclipse 命令来生成 Eclipse 的项目文件. Eclipse 任务将在第 38 章, Eclipse 插件里详细讨论.
通常 JAR 文件需要在某个地方发布. 为了完成这一步, 你需要告诉 Gradle 哪里发布 JAR 文件. 在 Gradle 里, 生成的文件比如 JAR 文件将被发布到仓库里. 在我们的例子里, 我们将发布到一个本地的目录. 你也可以发布到一个或多个远程的地点.Example 7.7. 发布 JAR 文件build.
Java 插件给项目加入了一些属性 (propertiy).这些属性已经被赋予了默认的值,已经足够来开始构建项目了.如果你认为不合适,改变它们的值也是很简单的.让我们看下这个例子.这里我们将指定 Java 项目的版本号,以及我们所使用的 Java 的版本.我们同样也加入了一些属性在 jar 的清单里.例子 7.5. 定制 MANIFEST.MF 文件build.gradlesourceCompatibility = 1.
通常,一个 Java 项目有许多外部的依赖,既是指外部的 JAR 文件.为了在项目里引用这些 JAR 文件,你需要告诉 Gradle 去哪里找它们.在 Gradle 中,JAR 文件位于一个仓库中,这里的仓库类似于 MAVEN 的仓库.仓库可以被用来提取依赖,或者放入一个依赖,或者两者皆可.举个例子,我们将使用开放的 Maven 仓库:例子 7.3. 加入 Maven 仓库build.
Java 插件在你的项目里加入了许多任务.然而,你只会用到其中的一小部分任务.最常用的任务是 build 任务,它会建立你的项目.当你运行 gradle build 命令时,Gradle 将会编译和测试你的代码,并且创建一个包含类和资源的 JAR 文件:例子 7.2. 建立一个 Java 项目gradle build 命令的输出>
如你所见,Gradle 是一种多用途的构建工具.它可以在你的构建脚本里构建任何你想要实现的东西.但前提是你必须先在构建脚本里加入代码,不然它什么都不会执行.大都数 Java 项目是非常相像的:你需要编译你的 Java 源文件,运行一些单元测试,同时创建一个包含你类文件的 JAR.如果你可以不需要为每一个项目重复编写这些,我想你会非常乐意的.
关注时代Java