Gradle7.x学习篇04 - 认识Plugin

标准的Project带来了一些功能,但还不足以用来构建产品项目。Gradle提供了一些核心插件,帮助开发Java、JavaEE或者Android项目。

插件的使用主要分两步,第一步是解析插件,这一过程是用来查到插件的正确版本并将其添加到构建脚本的classpath中。Gradle核心插件以及脚本插件都是自解析的。第二步是应用插件,主要是对Project执行Plugin.apply(T)方法。应用插件是幂等的,可以对Project多次apply同一个插件,没有任何副作用。

先来认识下几个Java相关的插件:

java

插件java是Gradle中JavaPlugin的简称,可以通过下面两种方式来使用java插件:

plugins {
    id 'java'
}
apply plugin: 'java'
// 或者 apply plugin: JavaPlugin

java插件相关的task

有些是java插件添加的,有些是来自于BasePlugin,常用的task如下:

clean
compileJava
classes
processResources
compileTestJava
testClassess
processTestResources
testClasses
test
jar
javadoc
assemble
check
build

java 默认约定的项目结构

src/main/java 产品源代码目录
src/main/resources 配置文件或者属性文件目录等
src/test/java 测试源代码
src/test/resources 测试用的配置文件或者属性文件等
src/sourceSet/java
src/sourceSet/resources

main 和test两个跟maven约定一样,默认的代码和资源文件都可以修改:

sourceSets {
    main {
        java {
            srcDirs = ['src/testJavaMain/java']
        }
        resources {
            srcDirs = ['src/testJavaMain/resources']
        }
    }
}
新增一个sourceSet

src/sourceSet/java 并不是说目录名称是sourceSet,而是我们可以在sourceSets 增加一个除main和test之外的sourceSet的名称:

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

添加了新的testSet 之后,可以看到新增了三个task:

  • compileTestSetJava - Compiles test set Java source
  • processTestSetResources - Processes test set resources
  • testSetClasses - Assembles test set classes

将上面task名称中testSet换成test就是标准java插件test用的task,直接去掉testSet那就是main所用的task。新增的sourceSet跟标准的test有很多相似之处,但是新增的sourceSet在默认情况下,相关的task不会依赖main相关的task, 当执行gradle testSetClasses -i时,可以看到:

# gradle testSetClasses -i
Selected primary task 'testSetClasses' from project :
Tasks to be executed: [task ':compileTestSetJava', task ':processTestSetResources', task ':testSetClasses']

默认的test的testClasses 依赖于main相关的任务

# gradle testClasses -i
Selected primary task 'testClasses' from project :
Tasks to be executed: [task ':compileJava', task ':processResources', task ':classes', task ':compileTestJava', task ':processTestResources', task ':testClasses']

可以通过配置来改进:

sourceSets {
    testSet {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
}

dependencies {
    testSetImplementation 'junit:junit:4.13'
}

这时候,新增的sourceSet 相关的task跟main就相关了:

# gradle testSetClasses -i
Selected primary task 'testSetClasses' from project :
Tasks to be executed: [task ':compileJava', task ':processResources', task ':classes', task ':compileTestSetJava', task ':processTestSetResources', task ':testSetClasses']

关于引入新的sourceSet的作用,可以参考官网提供集成测试的例子

依赖管理配置

java插件提供了一些依赖配置,用来引入并管理第三方库,这里列举几个常用的:

  • implementation, 仅在项目内部使用,编译和运行都有效
  • compileOnly,仅在编译时有效,不会在运行时包含,比如servletAPI
  • runtimeOnly, 仅在运行时有效,比如
  • testImplementation ,测试代码引用外部依赖
  • testCompileOnly,测试代码编译时有效
  • testRuntimeOnly, 测试代码运行时有效

java-library

java-library 插件扩展了java插件,一个很大的不同是提供了api这类依赖配置,api相对于implementation来说,api依赖的第三方库,可以作为当前模块的一部分继续暴露出去。

java-library-distribution

增加了一个名叫distZip的task,它可以将项目以及其依赖打包成zip文件或tar文件。

application

application 插件允许指定主类或者参数:

application {
    mainClass = 'org.gradle.sample.Main'
    applicationDefaultJvmArgs = ['-Dgreeting.language=en']
}

此插件可以将项目打包zip,并为程序执行提供了启动脚本,包括linux和windows启动脚本;

war

war 扩展了java插件,在标准java项目结构中新增了web资源文件的目录:
src/main/webapp

还提供了两个新的依赖配置:

  • providedCompile
  • providedRuntime

更多详情参见官网WAR

maven-publish

新增一些发布至maven仓库的task:

group = 'org.example'
version = '1.0'

publishing {
    publications {
        myLibrary(MavenPublication) {
            from components.java
        }
    }
    repositories {
        maven {
            name = 'myRepo'
            url = layout.buildDirectory.dir("repo")
        }
    }
}

gretty

第三方插件里面有个很有用的插件gretty,提供了web项目运行的容器,比如tomcat或jetty。因为是非Gradle核心插件,所以需要指定全名,以及版本:

plugins {
    id 'war'
    id "org.gretty" version "3.0.6"
}

gretty插件提供给很多容器运行和停止的task,比如appRun、appRunDebug等。

appRunDebug 是个很有用的task,使用它启动容器,可以看到:

(base) ➜  test_jetty git:(master) ✗ gradle appRunDebug
Listening for transport dt_socket at address: 5005
十一月 03, 2021 8:40:55 下午 org.springframework.web.servlet.FrameworkServlet initServletBean
信息: Initializing Servlet 'springApp'

在idea中配置Remote JVM Debug,设定好地址localhost和端口号5005,就可以监控web项目的运行,添加断点等等操作。

org.springdoc.openapi-gradle-plugin 是一个基于 Gradle 构建工具的插件,用于为基于 Spring 框架的应用程序生成 OpenAPI 文档。通过使用这个插件,开发人员可以方便地将其 Spring Boot 项目转换为遵循 OpenAPI(以前称为 Swagger)规范的文档,并将它们发布到其应用程序的端点上。 该插件简化了将 OpenAPI 规范集成到 Spring Boot 项目中的流程,使开发人员可以轻松地生成、编译和定制 OpenAPI 文档。它还支持自动注解的映射,从而减少了手动配置的工作量。 org.springdoc.openapi-gradle-plugin 提供了一个易于使用的DSL(领域专用语言),让开发人员可以通过 Gradle 构建文件来自定义其生成的 OpenAPI 文档。通过配置插件,开发人员可以定义文档的标题、版本、描述、联系人信息、许可证等内容,还可以选择要包含在文档中的响应码、路径、参数等信息。 使用该插件,开发人员可以更方便地将其 Spring Boot 项目的 API 文档集成到其应用程序中。它还提供了丰富的扩展性和自定义选项,使开发人员能够根据其特定的需求进行定制。 总的来说,org.springdoc.openapi-gradle-plugin 是一个非常有用的工具,可以帮助开发人员将 OpenAPI 规范集成到他们的 Spring Boot 项目中,并生成易于阅读和理解的 API 文档。它简化了这一过程,并提供了丰富的定制选项,让开发人员可以根据其需求对文档进行个性化定制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值