Gradle笔记 八 Gradle 插件(二)

简介: Gradle笔记 八 Gradle 插件

Gradle笔记 八 Gradle 插件(一)https://developer.aliyun.com/article/1391976


4.然后实现插件代码Text.groovy,注意文件后缀为groovy,文件要引入package com.onenewcode

package org.onenewcode
import org.gradle.api.Plugin import org.gradle.api.Project
class Text implements Plugin<Project>{
 @Override
void apply(Project project) {
project.task("onenewcode"){
doLast{
println("自定义onenewcode插件")
}
}
}
}
  1. 接下来在 main 目录下创建 resources 目录,在 resources 目录下创建 META-INF 目录,在 META-INF 目录下创建
    gradle-plugins 目录,在gradle-plugins 目录下创建properties 文件
  2. properties 文件可以自己命名,但是要以.properties 结尾,比如 com.onenewcode.plugin.properties,其 com.onenewcode.plugin 就是定义的包名路径.

  3. 最后需要在properties 文件中指明我们实现插件的全类名 implementation-class=org.onenewcode.Text到目前为止我们的插件项目已经写完了,在 module 引入我们写的插件 apply plugin:'org.onenewcode.plugin',然后执行插件的Task,./gradle onenewcode

正常输出则证明创建成功

这种形式的写法,在我们整个工程的module 都可以使用,但也只是限制在本工程,其他工程不能使用。

第二种写插件的方式他只能在本工程中使用,而其他的项目工程不能使用,有时候我们需要一个插件在多个工程中使用, 这时候我们就需要把插件上传maven 中。

第一步: 首先将上述buildSrc 目录复制一份,修改文件夹名,然后在settings.gradle 文件中使用include 引入第二步:修改build.gradle 文件,发布到maven 仓库中

applyplugin: 'groovy' //必须
applyplugin: 'maven-publish'
 dependencies{
 implementationgradleApi()//必须
implementationlocalGroovy()//必须
}
 repositories{
 google()
 jcenter()
 mavenCentral()//必须
}
 sourceSets{//把项目入口设置为src/main/groovy
 main{
 groovy{
 srcDir'src/main/groovy'
 }
 }
 }
 publishing{
 publications{
 myLibrary(MavenPublication){
 groupId='com.onenewcode.plugin'//指定GAV坐标信息
artifactId='library'
 version='1.1'
 fromcomponents.java//发布jar包
//fromcomponents.web///引入war插件,发布war包
}
 }
 repositories{
 maven{url"$rootDir/lib/release"}
 //发布项目到私服中
// maven{
 // name='myRepo'//name属性可选,表示仓库名称,url必填
// //发布地址:可以是本地仓库或者maven私服
// //url=layout.buildDirectory.dir("repo")
 // //url='http://my.org/repo'
 // //changeURLstopointtoyourrepos,e.g.http://my.org/repo
 // //认证信息:用户名和密码
// credentials{
 // username='joe'
 // password='secret'
 // }
 // }
 }
 }

第三步:执行publish 指令,发布到根 project 或者maven 私服仓库。

第四步:使用插件,在项目级 build.gradle 文件中将插件添加到 classpath:

buildscript {
repositories {
maven { url "$rootDir/lib/release" }
}
dependencies {
classpath "com.onenewcode.plugin:library:1.1"
}
}
apply plugin: 'java'
//是在 onenewcodeplugin  中定义的插件 ID apply plugin: 'com.onenewcode.plugin'

第五步:执行 gradle build 指令就会在控制台看到自定义插件的输出,说明自定义插件就已经生效了。

插件的关注点

第一点: 插件的引用

apply plugin: ‘插件名’

第二点:主要的功能[任务]

当我们在工程中引入插件后,插件会自动的为我们的工程添加一些额外的任务来完成相应的功能。以Java 插件为例,当我们加入java 插件之后,就加入了如下功能:

第三点:工程目录结构

一些插件对工程目结构有约定,所以我们一般遵循它的约定结构来创建工程,这也是 Gradle 的“约定优于配置”原则。例如java 插件规定的项目源集目录结构如下所示:

如果要使用某个插件就应该按照它约定的目录结构设置,这样能大大提高我们的效率,当然各目录结构也可以自己定义。

第四点:依赖管理

比如前面我们提到的 依赖的类型[依赖管理]部分,不同的插件提供了不同的依赖管理。

第五点:常用的属性

例如:Java 插件会为工程添加一些常用的属性,我们可以直接在编译脚本中直接使用。

属性名称 类型 默认值 描述
reportsDirName String reports 生成报告的目录名称
reportsDir File(只读) buildDir/reportsDirName 生成报告的目录
testResultsDirName String test-results 生成测试result.xml 文件的目录名称
testResultsDir File(只读) reportsDir/testReportDirName 生成测试报告的目录
libsDirName String libs 生成lib 库的目录名称
libsDir File(只读) buildDir/libsDirName 生成lib 库的目录
distsDirName String distributions 生成发布文件的目录名称
distsDir File(只读) buildDir/distsDirName 生成发布文件的目录
docsDir File(只读) buildDir/docsDirName 生成帮助文档的目录
dependencyCacheDirName String dependency-cache 存储缓存资源依赖信息的目录名称
dependencyCacheDir File(只读) buildDir/dependencyCacheDirName 存储缓存资源依赖信息的目录

当然,这里还有一些其它属性

属性名称 类型 默认值 描述
sourceSets SourceSetContainer(只读) Notnull 包含工程的资源集合(source sets.)
sourceCompatibility JavaVersion,也可以使用字符串或数字 根据使用的JVM定 编译java文件时指定使用的java版本
targetCompatibility JavaVersion,也可以使用字符串或数字, sourceCompatibility 生成classes的java版本
archivesBaseName String projectName 作为归档文件的默认名称,如JAR或者ZIP文件的名称

Java 插件分析

参考官网:https://docs.gradle.org/current/userguide/plugin_reference.html,以Java插件为例,讲解需要关注的几点:

第一点:我们要关注插件使用

plugins {
id 'java'
}

第二点:我们要关注插件的功能

我们可通过官方文档介绍了解某个插件功能或者百度、再或者大家可以通过 gradle tasks 查看加入java 插件前后的区别。

第三点:项目布局

一般加入一个插件之后,插件也会提供相应的目录结构,例如:java 插件的目录结构

当然这个默认的目录结构也是可以改动的例如:

sourceSets {
main {
java {
srcDirs = ['src/java']
}
resources {
srcDirs = ['src/resources']
}
}
}

也可设置源集的属性等信息。

第四点:依赖管理:以java 插件为例,提供了很多依赖管理项

源集依赖关系配置

相关文章
|
6月前
|
Java 程序员 API
Gradle笔记 二 Gradle的基础Groovy
Gradle笔记 二 Gradle的基础Groovy
75 0
|
Java 开发工具 Android开发
Cocos Creator 2.4.6 Android Gradle 版本升级为 6.5.1(插件4.1.0)
Cocos Creator 2.4.6 Android Gradle 版本升级为 6.5.1(插件4.1.0)
315 1
|
5月前
|
Java API 项目管理
Java一分钟之-Gradle插件开发:自定义构建逻辑
【6月更文挑战第5天】Gradle插件开发详解:从入门到发布。文章介绍如何创建自定义插件,强调依赖管理、任务命名和配置阶段的理解。示例代码展示插件实现及避免常见问题的方法。最后,讨论插件的发布与共享,助你提升构建效率并贡献于开发者社区。动手实践,打造强大Gradle插件!
121 3
|
6月前
|
Java API Spring
Gradle基础笔记
配置Gradle镜像为阿里云,修改`gradle-wrapper.properties`。使用`subprojects`管理父项目,设定编码为UTF-8。应用Spring Boot和依赖管理插件,子项目排除特定依赖,如`javax.servlet`。针对项目间依赖,使用`implementation`或`api`关键字。完整示例展示了多项目构建,包括仓库、依赖、源代码设置、任务和编码配置。
163 1
|
6月前
|
Java Maven 数据安全/隐私保护
Gradle笔记 三 Gradle的项目周期和settings 文件
Gradle笔记 三 Gradle的项目周期和settings 文件
90 0
Gradle笔记 三 Gradle的项目周期和settings 文件
|
6月前
|
Java 关系型数据库 MySQL
Gradle笔记 六 Gradle 中的Dependencies
Gradle笔记 六 Gradle 中的Dependencies
139 0
|
6月前
|
前端开发 Java Maven
Gradle笔记 七 publishing 项目发布(二)
Gradle笔记 七 publishing 项目发布
261 0
|
6月前
|
Java Maven
Gradle笔记 七 publishing 项目发布(一)
Gradle笔记 七 publishing 项目发布
131 0
|
6月前
|
Java
Gradle笔记 八 Gradle 插件(一)
Gradle笔记 八 Gradle 插件
138 0
|
6月前
|
Java
Gradle笔记 五 Gradle 中的文件操作
Gradle笔记 五 Gradle 中的文件操作
43 0