Gradle系列——Gradle插件(基于Gradle文档7.5)day3-2

news/2024/5/20 5:08:07 标签: java, gradle

Gradle系列——Gradle插件(基于Gradle文档7.5)day3-2

  • Gradle插件
    • 脚本插件
      • 实例
        • 1.定义一个脚本文件test.gradle
        • 2.在build.gradle中引入使用
    • 二进制插件(对象插件)
      • 内部插件
        • 引入插件
      • 第三方插件
        • 引入插件
    • 用户自定义插件
      • 编写自定义插件
        • 测试
    • 自定义插件扩展
      • 抽象类方式
        • 测试
      • 接口方式
        • 测试
    • 自定义插件(当前工程全局使用)
      • 构建步骤
        • 1.首先先建立一个名为 buildSrc的java Module
        • 2.将 buildSrc. 从included modules移除,重新构建
        • 3. 然后只保留build.gradle和src/ main目录
        • 4.修改build.gradle文件
        • 5.创建自定义Plugin类实现Plugin接口
        • 6.创建definePlugin.properties文件
        • 7.在需要使用的项目中引用
        • 8.测试
    • 自定义插件(暴露给其他项目使用)
    • 插件的注意点
      • 1.插件的引用
      • 2.插件的功能
      • 3.工程项目目录结构
      • 4.依赖管理
      • 5.关注属性和方法

Gradle插件

插件可以

  1. 可以添加任务【task】到项目中,从而帮助完成测试、编译、打包等。
  2. 可以添加依赖配置到项目中。
  3. 可以向项目中拓展新的扩展属性、方法等。
  4. 可以对项目进行一些约定,如应用Java插件后,约定src/main/java目录是我们的源代码存在位置,编译时编译这个目录下的Java源代码文件。

在这里插入图片描述

脚本插件

脚本插件的本质就是一个脚本文件,使用脚本插件时通过apply from:将脚本加载进来就可以了,后面的脚本文件可以是本地的也可以是网络上的脚本文件,下面定义一段脚本,我们在 build.gradle文件中使用它

脚本文件模块化的基础,可按功能把我们的脚本进行拆分一个个公用、职责分明的文件,然后在主脚本文件引用,比如:将很多共有的库版本号—起管理、应用构建版本—起管理等。

实例

gradle_16">1.定义一个脚本文件test.gradle

java">ext{
    maker="xxx"
    projectVersion="1.0"
    sdk=[
            minVersion:JavaVersion.VERSION_1_8
    ]
}

gradle_27">2.在build.gradle中引入使用

使用$的方式取用

java">//引入
apply from:'test.gradle'
task showMsg(){
    doFirst{
        println("信息:${maker},${sdk.minVersion}")
    }
}

在这里插入图片描述

二进制插件(对象插件)

就是实现了org.gradle.api.Plugin接口的插件,每个Java Gradle插件都有一个plugin id。

在这里插入图片描述

内部插件

  1. Java:为构建任何类型的 Java 项目提供支持。
  2. Java Library:为构建 Java 库提供支持。
  3. Java Platform:为构建 Java 平台提供支持。
  4. Groovy:为构建任何类型的 Groovy 项目提供支持。
  5. Scala:为构建任何类型的 Scala 项目提供支持。
  6. ANTLR:为使用 ANTLR 生成解析器提供支持。
  7. JVM Test Suite:为建模和配置多个测试套件调用提供支持。
  8. Test Report Aggregation:将多个测试任务调用(可能跨越多个 Gradle 项目)的结果聚合到单个 HTML 报告中。

母语

引入插件

引入方法一:

java">apply plugin : 'java'

引入方法二:

java">plugins {
    id 'java'
}

第三方插件

如果是使用第三方发布的二进制插件,一般需要配置对应的仓库和类路径

引入插件

方式一:

java">buildscript {
    ext{
        springBootVersion="2.7.2"
    }

    repositories {
        mavenLocal()
        maven {
            url '仓库地址'
        }
    }
    //引入
    dependencies {
        classpath("插件具体地址")
    }
}
//应用
apply {
    plugin:'org.springframework.boot'
}

方式二:
如果第三方插件被托管到了gradle的官网,就无需使用buildscript里配置classpath,直接引用

java">plugins {
    id 'org.springframework.boot' version '2.7.2'
}

用户自定义插件

注意,这只能在本项目中使用,其他项目无法使用
Gradle 插件打包了可重用的构建逻辑片段,可用于许多不同的项目和构建。 Gradle 允许您实现自己的插件,因此您可以重用您的构建逻辑,并与他人共享。

你可以用任何你喜欢的语言来实现 Gradle 插件,只要实现最终编译为 JVM 字节码

编写自定义插件

要创建 Gradle 插件,您需要编写一个实现 Plugin 接口的类。 当插件应用于项目时,Gradle 会创建插件类的实例并调用实例的 Plugin.apply() 方法。 项目对象作为参数传递,插件可以根据需要使用它来配置项目。
在build.gradle

java">class GreetingPlugin implements Plugin<Project> {
    void apply(Project project) {
        project.task('hello') {
            doLast {
                println 'Hello from the GreetingPlugin'
            }
        }
    }
}

// Apply the plugin
apply plugin: GreetingPlugin

测试

使用以下命令进行执行

java">gradle -q hello

自定义插件扩展

注意,这只能在本项目中使用,其他项目无法使用
大多数插件为构建脚本和其他插件提供了一些配置选项,用于自定义插件的工作方式。 插件使用 扩展对象 。 Gradle 项目 有一个关联的 ExtensionContainer 对象 其中包含已应用于项目的插件的所有设置和属性。 您可以通过向此容器添加扩展对象来为您的插件提供配置。 扩展对象只是具有代表配置的 Java Bean 属性的对象。

让我们在项目中添加一个简单的扩展对象。 这里我们添加一个 greeting项目的扩展对象,它允许您配置问候语

抽象类方式

GreetingPluginExtension是一个具有名为的属性的对象 message. 扩展对象以名称添加到项目中 greeting. 然后,此对象可用作与扩展对象同名的项目属性

java">
//构建抽象类,设置方法
abstract class GreetingPluginExtension {
    abstract Property<String> getMessage()

    GreetingPluginExtension() {
        message.convention('Hello from GreetingPlugin')
    }
}
//书写自定义插件类,使用project.extensions.create引入抽象类
//使用extension.message.get()调用方法
class GreetingPlugin implements Plugin<Project> {
    void apply(Project project) {
        // Add the 'greeting' extension object
        def extension = project.extensions.create('greeting', GreetingPluginExtension)
        // Add a task that uses configuration from the extension object
        project.task('hello') {
            doLast {
                println extension.message.get()
            }
        }
    }
}
//引入
apply plugin: GreetingPlugin

// 设置要打印的字符串
greeting.message = 'Hi from Gradle'

测试

java">gradle -q hello
//结果
Hi from Gradle

接口方式

通常,您需要在单个插件上指定多个相关属性。 Gradle 为每个扩展对象添加了一个配置块,因此您可以将设置组合在一起

java">interface GreetingPluginExtension {
    Property<String> getMessage()
    Property<String> getGreeter()
}

class GreetingPlugin implements Plugin<Project> {
    void apply(Project project) {
        def extension = project.extensions.create('greeting', GreetingPluginExtension)
        project.task('hello') {
            doLast {
                println "${extension.message.get()} from ${extension.greeter.get()}"
            }
        }
    }
}

apply plugin: GreetingPlugin

// Configure the extension using a DSL block
greeting {
    message = 'Hi'
    greeter = 'Gradle'
}

测试

java">gradle -q hello
Hi from Gradle

自定义插件(当前工程全局使用)

这种方式官网称为预编译脚本插件

从 Gradle 6.4 开始提供 Groovy DSL 预编译脚本插件。 Groovy DSL 预编译脚本插件可以应用在使用 Gradle 5.0 及更高版本的项目中

要应用预编译脚本插件,您需要知道它的 ID,该 ID 源自插件脚本的 文件名

例如,脚本 src/main/groovy/java-library-convention.gradle会有一个插件 ID java-library-convention. 同样地, src/main/groovy/my.java-library-convention.gradle将导致插件 ID 为 my.java-library-convention

使用它们,我们会构建buildSrc项目
buildSrc是Gradle.默认的插件目录,编译Gradle的时候会自动识别这个目录,将其中的代码编译为插件。

构建步骤

java_Module_218">1.首先先建立一个名为 buildSrc的java Module

在这里插入图片描述
在这里插入图片描述
此时会报这个错误
在这里插入图片描述

2.将 buildSrc. 从included modules移除,重新构建

找的父工程中的settings.gradle文件删除引用在这里插入图片描述
刷新gradle

在这里插入图片描述

gradlesrc_main_233">3. 然后只保留build.gradle和src/ main目录

其他全部删掉,注意名字一定是buildSrc,不然会找不到插件
在这里插入图片描述
在这里插入图片描述

gradle_237">4.修改build.gradle文件

java">apply plugin:'groovy'
apply plugin: 'maven-publish'


dependencies {
    implementation gradleApi()
    implementation localGroovy()
}

repositories {
    mavenCentral()
    google()
}

//项目入口设置
sourceSets {
    main{
        groovy{
            srcDir 'src/main/groovy'
        }
    }
}

5.创建自定义Plugin类实现Plugin接口

java">package test

import org.gradle.api.Plugin
import org.gradle.api.Project

class Test1 implements Plugin<Project> {
    @Override
    void apply(Project project) {
        project.task("hello"){
            doFirst {
                println("user define plugin")
            }
        }
    }
}

6.创建definePlugin.properties文件

在resources下创建resources/META-INF/gradle-plugins/definePlugin1.properties
在这里插入图片描述

配置加载信息

java">implementation-class=test.Test1

7.在需要使用的项目中引用

找到需要使用的项目的build.gradle文件

java">apply plugin:'definePlugin1'

8.测试

在这里插入图片描述

自定义插件(暴露给其他项目使用)

这里需要我们发布到maven或gradle的仓库才可以
这里大家就看官方文档吧–>官方文档

插件的注意点

1.插件的引用

java">apply plugin: '插件名'

2.插件的功能

当我们在工程中引入插件后,插件会自动的为我们的工程添加一些额外的任务来完成相应的功能。
我们可以使用gradle tasks查看

在这里插入图片描述

3.工程项目目录结构

使用tree命令进行查看项目目录结构
插件的目录结构多有不同,所以我们必须要关注插件目录结构,这样可以提高我们的效率

4.依赖管理

关注如何引用依赖插件

5.关注属性和方法

具体文档地址
以下是Java插件常见属性

属性名称类型默认值描述
reportsDirNameStringreports生成报告的目录名称
reportsDirFile(只读)buildDir/rep.ortsDirName生成报告的目录
testResultsDirNameStringtest-results生成测试result.xml文件的目录名称
testResultsDirFile(只读)reportsDir/testReportDirName生成测试报告的目录
libsDirNameStringlibs生成 lib库的目录名称
libsDirFile (只读)buildDir/libsDirName生成lib库的目录
distsDirNameStringdistributions生成发布文件的目录名称
distsDirFile (只读)buildDir/distsDirName生成发布文件的目录
docsDirNameStringdocs生成帮助文档的目录名称
docsDirFile(只读)buildDir/docsDirName生成帮助文档的目录
dependencyCacheDirNameStringdependency-cache存储缓存资源依赖信息的目录名称
dependencyCacheDirFile (只读)buildDir/dependencyCacheDirName存储缓存资源依赖信息的目录

http://www.niftyadmin.cn/n/1717095.html

相关文章

JMeter:生成漂亮的多维度的HTML报告

JMeter&#xff1a;生成漂亮的多维度的HTML报告 我们做性能测试的时候会经常使用一些性能测试工具&#xff0c;我个人比较喜欢Jmeter这个工具&#xff0c;但是JMeter这个工具在生成测试报告方面一直有所欠缺。但是JMeter在3.0以后解决了这个问题。 JMeter3.0以后引入了Dashbo…

Gradle系列——Gradle的build.gradle文件详情,项目发布(基于Gradle文档7.5)day3-3

Gradle系列——Gradle的build.gradle文件详情&#xff08;基于Gradle文档7.5&#xff09;day3-3build.gradlebuild常用方法和属性解决一些版本&#xff0c;字符集问题&#xff08;常见属性配置&#xff09;Repositories&#xff08;仓库配置&#xff09;Subprojects和Allprojec…

JMeter入门教程

前言&#xff1a; 本文写给想了解性能测试和JMeter的小白&#xff0c;适合对这两者了解很少的同学们&#xff0c;如果已经有使用经验的请绕道&#xff0c;别浪费时间:-) 我们将介绍JMeter的使用场景&#xff0c;如何安装、运行JMeter&#xff0c;以及开始一个最最简单的测试。…

二阶魔方入门玩法教程

第一步&#xff1a;还原底层角块 2这一步我们要将底层的4个角块都复原&#xff0c;非常简单&#xff0c;只需要记一个算法就好了&#xff0c;假设以白色为底&#xff0c;白色块只会有5个位置&#xff0c;这些位置要么是对称的&#xff0c;要么很容易变成前面的位置。 3我们举例…

三种常用的流行病学指标:RR、AR和OR

当我们研究某种疾病或健康问题时&#xff0c;我们需要了解不同人群之间的风险差异。为了衡量这种风险差异&#xff0c;流行病学家们使用了许多不同的指标&#xff0c;其中最常用的包括相对风险&#xff08; R R RR RR&#xff09;、绝对风险&#xff08; A R AR AR&#xff09;…

JavaIO进阶系列——BIO,NIO,AIO系列概述day1-1

JavaIO进阶系列——BIO,NIO,AIO系列概述day1-1概述IO模型BIO模型NIO模型AIO模型使用场景概述 在Java的软件设计开发中&#xff0c;通信架构是不可避免的&#xff0c;我们在进行不同系统或者不同进程之间的数据交互&#xff0c;或者在高并发下的通信场景下都需要用到网络通信相…

从Java5基础开始初识Lambda表达式——走进Java Lambda(一)

从Java5开始初识Lambda表达式 Lambda表示式是Java8的特性&#xff0c;对于如何安装Java8&#xff0c;装哪个版本的什么IDE&#xff0c;可以支持Java8语法&#xff0c;这里就恕不介绍了。请你确认安装了环境再往下看&#xff0c;真的&#xff0c;谢谢你。 我们知道在Java里面&am…

JavaIO进阶系列——BIO day1-2

JavaIO进阶系列——BIO day1-2BIOBIO工作流程同步阻塞实例ClientServer测试实现"keep-alive"&#xff08;多发&#xff0c;多收&#xff09;ClientServer测试实现多端接收Client开启IDEA配置Server服务端使用多线程ServerThreadServerReader线程服务类测试多端接收的…