游戏开发工具

Gradle Java 插件

Java 插件向一个项目添加了 Java 编译、 测试和 bundling 的能力。它是很多其他 Gradle 插件的基础服务。

用法

要使用 Java 插件,请在构建脚本中加入:

使用 Java 插件

build.gradle

apply plugin: 'java'

源集

Java 插件引入了一个源集的概念。一个源集只是一组用于编译并一起执行的源文件。这些源文件可能包括 Java 源代码文件和资源文件。其他有一些插件添加了在源集里包含 Groovy 和 Scala 的源代码文件的能力。一个源集有一个相关联的编译类路径和运行时类路径。

源集的一个用途是,把源文件进行逻辑上的分组,以描述它们的目的。例如,你可能会使用一个源集来定义一个集成测试套件,或者你可能会使用单独的源集来定义你的项目的 API 和实现类。

Java 插件定义了两个标准的源集,分别是 main 和 test。main 源集包含你产品的源代码,它们将被编译并组装成一个 JAR 文件。test 源集包含你的单元测试的源代码,它们将被编译并使用 JUnit 或 TestNG 来执行。

任务

Java 插件向你的项目添加了大量的任务,如下所示。

表 23.1. Java 插件-任务

任务名称依赖于类型描述
compileJava产生编译类路径中的所有任务。这包括了用于jar任务。JavaCompile使用 javac 编译产品中的 Java 源文件。
processResources-Copy把生产资源文件拷贝到生产的类目录中。
classesprocessResources。一些插件添加了额外的编译任务。Task组装生产的类目录。
compileTestJavacompile,再加上所有能产生测试编译类路径的任务。JavaCompile使用 javac 编译 Java 的测试源文件。
processTestResources-Copy把测试的资源文件拷贝到测试的类目录中。
testClassesprocessTestResources。一些插件添加了额外的测试编译任务。Task组装测试的类目录。
jarcompileJar组装 JAR 文件
javadoccompileJavadoc使用 Javadoc 生成生产的 Java 源代码的API文档
testcompileTest,再加上所有产生测试运行时类路径的任务。Test使用 JUnit 或 TestNG运行单元测试。
uploadArchives使用jarUpload使用archives配置上传包括 JAR 文件的构件。
clean-Delete删除项目的 build 目录。
TaskName-Delete删除由指定的任务所产生的输出文件。例如, jar任务中所创建的 JAR 文件,test任务所创建的测试结果。

对于每个你添加到该项目中的源集,Java 插件将添加以下的编译任务:

表 23.2. Java 插件-源集任务

任务名称依赖于类型描述
SourceSetJava所有产生源集编译类路径的任务。JavaCompile使用 javac 编译给定的源集中的 Java 源文件。
SourceSetResources-Copy把给定的源集的资源文件拷贝到类目录中。
sourceSetClassesSourceSetResources。某些插件还为源集添加了额外的编译任务。Task组装给定源集的类目录。

Java 插件还增加了大量的任务构成该项目的生命周期:

表 23.3. Java 插件-生命周期任务

任务名称依赖于类型描述
assemble项目中的所有归档项目,包括jar任务。某些插件还向项目添加额外的归档任务。Task组装项目中所有的归类文件。
check项目中的所有核查项目,包括test任务。某些插件还向项目添加额外的核查任务。Task执行项目中所有的核查任务。
buildassembleTask执行项目的完事构建。
buildNeededbuild任务。Task执行项目本身及它所依赖的其他所有项目的完整构建。
buildDependentsbuild任务。Task执行项目本身及依赖它的其他所有项目的完整构建。
ConfigurationName使用配置ConfigurationName生成构件的任务。Task组装指定配置的构件。该任务由Base插件添加,并由Java插件隐式实现。
ConfigurationName使用配置ConfigurationName上传构件的任务。Upload组装并上传指定配置的构件。该任务由Base插件添加,并由Java插件隐式实现。

uploadConfigurationName 使用配置 ConfigurationName 上传构件的任务。 Upload 组装并上传指定配置的构件。该任务由 Base 插件添加,并由 Java 插件隐式实现。 下图显示了这些任务之间的关系。

图23.1. Java 插件 - 任务

Java 插件 - 任务

项目布局

Java 插件会假定如下所示的项目布局。这些目录都不需要一定存在,或者是里面有什么内容。Java 插件将会进行编译,不管它发现什么,并处理缺少的任何东西。

表 23.4. Java 插件-默认项目布局

目录意义
src/main/java产品的Java源代码
src/main/resources产品的资源
src/test/javaJava 测试源代码
src/test/resources测试资源
sourceSet/java给定的源集的Java源代码
sourceSet/resources给定的源集的资源

更改项目布局

你可以通过配置适当的源集,来配置项目的布局。这一点将在以下各节中详细讨论。这里是如何更改 main Java 和资源源目录的一个简短的例子。

自定义 Java 源代码布局

build.gradle

sourceSets {
    main {
        java {
            srcDir 'src/java'
        }
        resources {
            srcDir 'src/resources'
        }
    }
}

依赖管理

Java 插件向项目添加了许多依赖配置,如下图所示。它对一些任务指定了这些配置,如 compileJava 和 test。

表23.5. Java插件 - 依赖配置

名称继承自在哪些任务中使用意义
compile-compileJava编译时依赖
runtimecompile-运行时依赖
testCompilecompilecompileTestJava用于编译测试的其他依赖
testRuntimeruntime, testCompiletest只用于运行测试的其他依赖
archives-uploadArchives由本项目生产的构件(如jar包)。
defaultruntime-本项目上的默认项目依赖配置。包含本项目运行时所需要的构件和依赖。

图23.2. Java 插件 - 依赖配置

Java 插件 - 依赖配置

对于每个你添加到项目中的源集,Java 插件都会添加以下的依赖配置:

表23.6. Java 插件 - 源集依赖配置

名称继承自在哪些任务中使用意义
sourceSetCompile-compileSourceSetJava给定源集的编译时依赖
sourceSetRuntimesourceSetCompile-给定源集的运行时依赖

常规属性

Java 插件向项目添加了许多常规属性,如下图所示。您可以在构建脚本中使用这些属性,就像它们是 project 对象的属性一样。

表23.7. Java 插件 - 目录属性

属性名称类型默认值描述
reportsDirNameStringreports相对于build目录的目录名称,报告将生成到此目录。
reportsDirFile (read-only)reportsDirName报告将生成到此目录。
testResultsDirNameStringtest-results相对于build目录的目录名称,测试报告的.xml文件将生成到此目录。
testResultsDirFile (read-only)testResultsDirName测试报告的.xml文件将生成到此目录。
testReportDirNameStringtests相对于build目录的目录名称,测试报告将生成到此目录。
testReportDirFile (read-only)testReportDirName测试报告生成到此目录。
libsDirNameStringlibs相对于build目录的目录名称,类库将生成到此目录中。
libsDirFile (read-only)libsDirName类库将生成到此目录中。
distsDirNameStringdistributions相对于build目录的目录名称,发布的文件将生成到此目录中。
distsDirFile (read-only)distsDirName要发布的文件将生成到此目录。
docsDirNameStringdocs相对于build目录的目录名称,文档将生成到此目录。
docsDirFile (read-only)docsDirName要生成文档的目录。
dependencyCacheDirNameStringdependency-cache相对于build目录的目录名称,该目录用于缓存源代码的依赖信息。
dependencyCacheDirFile (read-only)dependencyCacheDirName该目录用于缓存源代码的依赖信息。

表 23.8. Java 插件 - 其他属性