`
wbj0110
  • 浏览: 1603225 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Gradle学习系列之六——使用java Plugin

阅读更多

请通过以下方式下载本系列文章的Github示例代码:

git clone https://github.com/davenkin/gradle-learning.git

 


 Gradle最常用的Plugin便是java Plugin了。和其他Plugin一样,java Plugin并没有什么特别的地方,只是向Project中引入了多个Task和Property。当然,java Plugin也有比较与众不同的地方,其中之一便是它在项目中引入了构建生命周期的概念,就像Maven一样。但是,和Maven不同的是,Gradle的项目构建生命周期并不是Gradle的内建机制,而是由Plugin自己引入的。



(1)java Plugin引入的主要Task
执行“gradle build”,我们已经可以看到java Plugin所引入的主要Task:

复制代码
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build

BUILD SUCCESSFUL

Total time: 4.813 secs
复制代码

 

build也是java Plugin所引入的一个Task,它依赖于其他Task,其他Task又依赖于另外的Task,所以有了以上Task执行列表。以上Task执行列表基本上描述了java Plugin向项目中所引入的构建生命周期概念。

除了定义众多的Task外,java Plugin还向Project中加入了一些额外的Property。比如,sourceCompatibility用于指定在编译Java源文件时所使用的Java版本,archivesBaseName用于指定打包成Jar文件时的文件名称。

(2)Java项目的目录结构
在默认情况下,Gradle采用了与Maven相同的Java项目目录结构:


关于Maven标准目录结构,请参考Maven官网。当然,跟Maven一样,以上只是默认的目录结构,我们可以通过配置来修改这些目录结构。

(3)配置已有source set
Gradle在采用了Maven目录结构的同时,还融入了自己的一些概念,即source set。对于上图中的目录结构,Gradle实际上为我们创建了2个source set,一个名为main,一个名为test。
请注意,这里的source set的名字main与上图目录结构中的main文件夹并无必然的联系,只是在默认情况下,Gradle为了source set概念到文件系统目录结构的映射方便,才采用了相同的名字。对于test, 也是如此。我们完全可以在build.gradle文件中重新配置这些source set所对应的目录结构,同时,我们还可以创建新的source set。

从本质上讲,Gradle的每个source set都包含有一个名字,并且包含有一个名为java的Property和一个名为resources的Property,他们分别用于表示该source set所包含的Java源文件集合和资源文件集合。在实际应用时,我们可以将他们设置成任何目录值。比如,我们可以重新设置main的目录结构:

复制代码
sourceSets {
   main {
      java {
         srcDir 'java-sources'
      }
      resources {
         srcDir 'resources'
      }
   }
}
复制代码

 

此时所对应的项目目录结构如下:


我们重新设置了main的目录结构,而对于test,我们保留了Gradle默认的目录结构。


(4)创建新的source set
要创建一个新的source set也是非常简单的,比如,我们可以创建一个名为api的source set来存放程序中的接口类:

sourceSets {
   api
}

 

当然,以上配置也可以与main放在一起。在默认情况下,该api所对应的Java源文件目录被Gradle设置为${path-to-project}/src/api/java,而资源文件目录则被设置成了${path-to-project}/src/api/resources。我们也可以像上面的main一样重新对api的目录结构进行配置。

Gradle会自动地为每一个新创建的source set创建相应的Task,创建规律为:对于名为mySourceSet的source set,Gradle将为其创建compile<mySourceSet>Java、process<mySourceSet>Resources和<mySourceSet>Classes这3个Task。对于这里api而言,Gradle会为其创建名为compileApiJava、processApiResource和apiClasses Task。我们可以在命令行中执行"gradle apiClasses"。

你可能会注意到,对于main而言,Gradle并没有相应的compileMainJava,原因在于:由于main是Gradle默认创建的source set,并且又是及其重要的source set,Gradle便省略掉了其中的“Main”,而是直接使用了compileJava作为main的编译Task。对于test来说,Gradle依然采用了compileTestJava。

通常的情况是,我们自己创建的名为api的source set会被其他source set所依赖,比如main中的类需要实现api中的某个接口等。此时我们需要做两件事情。第一,我们需要在编译main之前对api进行编译,即编译main中Java源文件的Task应该依赖于api中的Task:

classes.dependsOn apiClasses

 

第二,在编译main时,我们需要将api编译生成的class文件放在main的classpath下。此时,我们可以对main和test做以下配置:

复制代码
sourceSets {
   main {
      compileClasspath = compileClasspath + files(api.output.classesDir)
   }
   test {
      runtimeClasspath = runtimeClasspath + files(api.output.classesDir)
   }
}
复制代码

 

之所以需要对test的runtimeClasspath进行设置,是因为在运行测试时我们也需要加载api中的类。

分享到:
评论

相关推荐

    gradle-css-plugin-1.8.3.zip

    本文将深入探讨两个在开源世界中备受推崇的构建工具插件——Gradle CSS Plugin 1.8.3和Hogan Compile Maven Plugin,了解它们的功能特性以及如何在项目中应用。 首先,我们关注的是Gradle CSS Plugin 1.8.3。Gradle...

    composer-gradle-plugin,Gradle任务类型和与之交互的插件.zip

    本文将深入探讨一个特定的开源项目——`composer-gradle-plugin`,它是如何整合Gradle任务类型和插件,以便在Gradle环境中执行`gojuno/composer`的。 `composer-gradle-plugin`是一个针对PHP项目而设计的Gradle插件...

    手把手带你自定义 Gradle 插件 —— Gradle 系列(2).doc

    2. **应用插件**:在`build.gradle`文件中使用`apply plugin:`指令应用插件,如: ```groovy apply plugin: 'com.example.your-plugin' ``` 3. **配置插件**:如果插件提供可配置属性,可以在`build.gradle`中...

    gradle-plugin-0.10.0.zip

    本文将深入探讨一个特别的Gradle插件——"sdk-manager-plugin",版本号为0.10.0,以及它的使用场景和功能。 "gradle-plugin-0.10.0.zip"这个压缩包内包含了名为"sdk-manager-plugin-master"的源代码,这是一个开源...

    gradle-rxjava-project-plugin-1.12.10.zip

    本文将详细介绍Gradle的RxJava插件——`gradle-rxjava-project-plugin-1.12.10.zip`,以及与其相关的`gradle-info-plugin.zip`,帮助开发者更好地理解和运用这些工具。 首先,`gradle-rxjava-project-plugin-1.12....

    gradle-1.8-bin

    Gradle 是一个强大的构建自动化工具,广泛应用于Java、Android和其他多语言项目中。在本案例中,我们关注的是 Gradle 的一个特定版本——1.8,这是一个针对Android开发的重要组件。 Gradle 1.8是Gradle早期的一个...

    gradle-3.5.1-bin.zip

    `gradle-3.5.1-bin.zip`是Gradle的一个特定版本——3.5.1的二进制发行版,它包含了运行Gradle所需的全部组件,便于离线安装和使用。 在Android Studio中,Gradle是不可或缺的部分,用于构建和打包Android应用。`...

    gradle-3.4-bin.zip

    Gradle采用领域特定语言(DSL)——主要是Groovy和Kotlin DSL,使得构建脚本更加灵活且易于理解。`gradle-3.4-bin.zip`是Gradle 3.4版本的二进制发行版,它包含了运行Gradle所需的所有核心库和可执行文件。 **1. ...

    gradle-4.6-all

    Gradle 是一个强大的构建自动化工具,广泛用于Java、Android和其他多语言项目。Gradle采用领域特定语言(DSL)——通常是Groovy或Kotlin,来定义项目构建规则,使其具有高度可扩展性和灵活性。Gradle-4.6-all压缩包...

    gradle-2.10.zip

    Gradle是一款强大的构建工具,广泛应用于Java、Android和其他多种项目的构建和自动化管理。它采用领域特定语言(DSL)——Groovy或Kotlin,为开发者提供了灵活的构建脚本编写方式,使得项目配置更加简洁和可读。在...

    gradle-2.9-bin.zip

    《Android Studio Gradle工具详解——以gradle-2.9-bin.zip为例》 在Android应用开发领域,Gradle是一款不可或缺的构建工具,它以其强大的灵活性和自动化能力深受开发者喜爱。当我们下载并使用像"gradle-2.9-bin....

    gradle-gaelyk-plugin-0.6.zip

    1. **自动编译**:使用Groovy编译器将源代码编译为可执行的Java字节码,同时支持对Groovy和Java混合项目进行编译。 2. **测试支持**:集成测试框架,如Spock或JUnit,帮助开发者编写和运行单元测试,确保代码质量。...

    dropwizard-debpkg-maven-plugin-0.4.zip

    在`dropwizard-debpkg-maven-plugin-0.4.zip`的压缩文件中,尽管未提供具体的源代码或文档,但我们可以推断这个版本的插件应该包含了插件的Java源码、测试用例、Maven配置文件等资源,供开发者学习和使用。...

    gradle-spelling-plugin:Gradle插件使用自定义黑名单检查拼写

    `gradle-spelling-plugin` 是一个针对Gradle构建系统的插件,它专注于代码质量的一个特定方面——拼写检查。这个插件允许开发者在构建过程中对源代码、文档等文本资源进行拼写检测,确保项目中的文字内容准确无误。 ...

    semver-git-plugin:用于通过git标签基于语义版本控制的版本控制项目的Gradle插件

    **gradle-plugin** 指的是该插件是为Gradle设计的,可以被其他Gradle项目引入并使用。在Gradle项目中,你可以通过配置build.gradle文件来应用和配置这个插件。 **semver** 和 **versioning** 是关键词,强调了这个...

    gogradle:为Go提供全面支持的Gradle插件

    Gradle使用具有与Java类似语法的DSL来描述构建,这对我来说比较容易。 Makefile和Shell存在跨平台问题,尤其是在Windows上。 感谢Gradle和JVM,Gogradle提供了出色的跨平台支持,并可以利用整个Java生态系统Gradle...

    Android-Bazel和Gradle的Android基准测试项目

    - **Android插件**:Android Gradle Plugin提供了一系列任务,如assembleDebug、assembleRelease,用于构建不同类型的APK。 2. **Bazel**: - **Google起源**:Bazel是由Google开发的开源构建工具,旨在提供跨...

    扩展PlugIn插件解析XML

    在Java领域,当需要将XML文件转换为Java对象时,Apache Commons Digester库提供了一个强大的工具——Digester类,该类可以帮助我们实现这一目标。本文将深入探讨如何通过接口和Digester类来解析XML文件,创建并填充...

    environments-maven-plugin-0.0.17.zip

    本文将深入探讨一个开源项目——`environments-maven-plugin-0.0.17.zip`,以及其中包含的`gradle-executable-jar-plugin`,这是一个专门用于创建可执行JAR的Gradle插件。这个插件使得开发者能够轻松地构建一个包含...

Global site tag (gtag.js) - Google Analytics