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 | 把生产资源文件拷贝到生产的类目录中。 |
classes | processResources 。一些插件添加了额外的编译任务。 | Task | 组装生产的类目录。 |
compileTestJava | compile ,再加上所有能产生测试编译类路径的任务。 | JavaCompile | 使用 javac 编译 Java 的测试源文件。 |
processTestResources | - | Copy | 把测试的资源文件拷贝到测试的类目录中。 |
testClasses | processTestResources 。一些插件添加了额外的测试编译任务。 | Task | 组装测试的类目录。 |
jar | compile | Jar | 组装 JAR 文件 |
javadoc | compile | Javadoc | 使用 Javadoc 生成生产的 Java 源代码的API文档 |
test | compileTest ,再加上所有产生测试运行时类路径的任务。 | Test | 使用 JUnit 或 TestNG运行单元测试。 |
uploadArchives | 使用jar 。 | Upload | 使用archives 配置上传包括 JAR 文件的构件。 |
clean | - | Delete | 删除项目的 build 目录。 |
TaskName | - | Delete | 删除由指定的任务所产生的输出文件。例如, jar 任务中所创建的 JAR 文件,test 任务所创建的测试结果。 |
对于每个你添加到该项目中的源集,Java 插件将添加以下的编译任务:
表 23.2. Java 插件-源集任务
任务名称 | 依赖于 | 类型 | 描述 |
SourceSet Java | 所有产生源集编译类路径的任务。 | JavaCompile | 使用 javac 编译给定的源集中的 Java 源文件。 |
SourceSet Resources | - | Copy | 把给定的源集的资源文件拷贝到类目录中。 |
sourceSet Classes | SourceSet Resources。某些插件还为源集添加了额外的编译任务。 | Task | 组装给定源集的类目录。 |
Java 插件还增加了大量的任务构成该项目的生命周期:
表 23.3. Java 插件-生命周期任务
任务名称 | 依赖于 | 类型 | 描述 |
assemble | 项目中的所有归档项目,包括jar 任务。某些插件还向项目添加额外的归档任务。 | Task | 组装项目中所有的归类文件。 |
check | 项目中的所有核查项目,包括test 任务。某些插件还向项目添加额外的核查任务。 | Task | 执行项目中所有的核查任务。 |
build | assemble | Task | 执行项目的完事构建。 |
buildNeeded | build 任务。 | Task | 执行项目本身及它所依赖的其他所有项目的完整构建。 |
buildDependents | build 任务。 | 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/java | Java 测试源代码 |
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 | 编译时依赖 |
runtime | compile | - | 运行时依赖 |
testCompile | compile | compileTestJava | 用于编译测试的其他依赖 |
testRuntime | runtime, testCompile | test | 只用于运行测试的其他依赖 |
archives | - | uploadArchives | 由本项目生产的构件(如jar包)。 |
default | runtime | - | 本项目上的默认项目依赖配置。包含本项目运行时所需要的构件和依赖。 |
图23.2. Java 插件 - 依赖配置
Java 插件 - 依赖配置
对于每个你添加到项目中的源集,Java 插件都会添加以下的依赖配置:
表23.6. Java 插件 - 源集依赖配置
名称 | 继承自 | 在哪些任务中使用 | 意义 |
sourceSetCompile | - | compileSourceSetJava | 给定源集的编译时依赖 |
sourceSetRuntime | sourceSetCompile | - | 给定源集的运行时依赖 |
常规属性
Java 插件向项目添加了许多常规属性,如下图所示。您可以在构建脚本中使用这些属性,就像它们是 project 对象的属性一样。
表23.7. Java 插件 - 目录属性
属性名称 | 类型 | 默认值 | 描述 |
reportsDirName | String | reports | 相对于build目录的目录名称,报告将生成到此目录。 |
reportsDir | File (read-only) | reportsDirName | 报告将生成到此目录。 |
testResultsDirName | String | test-results | 相对于build目录的目录名称,测试报告的.xml文件将生成到此目录。 |
testResultsDir | File (read-only) | testResultsDirName | 测试报告的.xml文件将生成到此目录。 |
testReportDirName | String | tests | 相对于build目录的目录名称,测试报告将生成到此目录。 |
testReportDir | File (read-only) | testReportDirName | 测试报告生成到此目录。 |
libsDirName | String | libs | 相对于build目录的目录名称,类库将生成到此目录中。 |
libsDir | File (read-only) | libsDirName | 类库将生成到此目录中。 |
distsDirName | String | distributions | 相对于build目录的目录名称,发布的文件将生成到此目录中。 |
distsDir | File (read-only) | distsDirName | 要发布的文件将生成到此目录。 |
docsDirName | String | docs | 相对于build目录的目录名称,文档将生成到此目录。 |
docsDir | File (read-only) | docsDirName | 要生成文档的目录。 |
dependencyCacheDirName | String | dependency-cache | 相对于build目录的目录名称,该目录用于缓存源代码的依赖信息。 |
dependencyCacheDir | File (read-only) | dependencyCacheDirName | 该目录用于缓存源代码的依赖信息。 |
表 23.8. Java 插件 - 其他属性