请通过下面方式下载本系列文章的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也是很easy的,比方,我们能够创建一个名为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学习之使用java plugin相关推荐

  1. Gradle学习之构建java与web项目

    一.使用Gradle的java插件构建Java项目 1)Gradle插件包含了若干个接口定义和已有的任务项,语法结构:apply plugin:'插件名' ,此处我们定义插件 apply plugin ...

  2. Gradle学习总结——抓重点学Gradle

    前言 网上关于Gradle的教程很多,但很多都是以"面"切入- 通过大量讲解其用法及其API分类来阐述.但Gradle API使用技巧众多,API更是成千上百,臣妾记不住呀.个人深 ...

  3. Gradle学习系列之十——自定义Plugin(本系列完)

    在本系列的上篇文章中,我们讲到了如何自定义Task类型,在本篇文章中,我们将讲到如何自定义Plugin. 请通过以下方式下载本系列文章的Github示例代码: git clone https://gi ...

  4. Java Plugin Framework (JPF) java插件框架学习

    2019独角兽企业重金招聘Python工程师标准>>> JPF (Java Plugin Framework) 是一个插件框架,类似Eclipse的插件系统,不过这个的依赖关系是使用 ...

  5. Gradle 学习 ----Gradle 进阶说明

    Gradle 进阶说明 3 .Gradle进阶说明 3. 1 .项目的生命周期 3. 2 .settings文件 3. 3 .Task 3. 3. 1 .任务入门 3. 3. 2 .任务的行为 3. ...

  6. Gradle学习教程

    Gradle学习教程 一.Gradle是什么 二.为什么要Gradle 三.如何安装Gradle 四.核心概念基础 五.Gradle构建的生命周期 初始化阶段 配置阶段 执行阶段 六.任务-(简单任务 ...

  7. Gradle学习之基础篇

    一.gradle基础概念 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具.Gradle抛弃了基于各种繁琐的XML,使用一种基于Groovy的特定领域语言( ...

  8. Gradle学习之Android-DSL AppExtension篇

    前言:上一篇文章已经讲解了Gradle的语法篇,接下来我们要开始学习android-gradle-dsl了,不过我上一篇漏写了一节函数,这个我打算接下来补上,俗话说的好墨刀不误砍柴工,上一篇文章我们的 ...

  9. Gradle学习(二十)——多项目构建详解

    跨项目配置 虽然子项目之间可以完全隔离单独配置,但是子项目直接有相同特征的情况也是很常见的,多个项目共享配置是更好的选择. 配置和执行 在gradle学习-十八-构建的生命周期这一篇中我们已经讲过Gr ...

最新文章

  1. 用javah 导出类的头文件, 常见的错误及正确的使用方法
  2. ListView自定义视图中对Button按钮实现仅允许一个按钮处于开启状态
  3. 把手机刷成服务器系统,旧手机改成云服务器
  4. kotlin android获取按钮,Kotlin 实现按钮点击跳转监听事件方式
  5. 5.2 最优近似解 $\mathbf{\hat{x}} = A^{-1}_L\mathbf{b}$ 是最小二乘解
  6. socket编程资料-网络收集
  7. 22 File Links: Hard and Symbolic
  8. 是什么原因让你选择做程序员
  9. Vue中登陆超时,返回登陆页面
  10. JVM——类的加载过程
  11. 手撕包菜BT搜索引擎带爬虫自动抓取安装
  12. 教你从redhat官网获取ISO镜像
  13. 如何用js实现数组倒序输出
  14. Qt设置应用程序图标、小图标显示+打包发布exe
  15. 分布式环境时钟同步问题
  16. 外卖优惠券公众号怎么做回复小程序链接
  17. c语言中取小数函数,C / C++ 保留小数函数(setprecision(n)的一些用法总结)
  18. 《iPad开发从入门到精通》——6.4节收藏历史
  19. mysql员工请假流程表字段_“员工请假”流程及在线表单开发示例
  20. IMWeb提升营Day5

热门文章

  1. 有关 input默认宽度
  2. 给枚举值增加扩展数据
  3. 解决: libcimtd.lib not found, rpcndr.lib not found
  4. JQuery中button提交表单报TypeError: elem[type] is not a function jquery
  5. linux 系统让服务后台运行
  6. MySQL中MVCC+行级锁的工作机制(源码佐证)
  7. kubeadm部署K8S集群并使用containerd做容器运行时
  8. 前端工程师的CI进阶之路
  9. leetcode51. N皇后
  10. 轴承配合公差表查询_如何选择轴承公差和配合,才能更好保证电机轴承系统的运行?...