第一章:Gradle 插件简介
1.1 概述
- 所有的 Gradle 项目中都存在有 Gradle Plugin 的定义,不同的 Gradle 插件可以帮助开发者实现不同的开发功能,例如:在之前创建的 Java 项目和 WEB 项目中都有 Gradle Plugin 的定义:
plugins {
id 'java' // 配置的是一个 Java 插件(Java 项目)
id 'java-library'
}
plugins {
id 'java' // 配置的是一个 Java 插件(Java 项目)
id 'java-library'
id 'war'
}
- 这两个插件可以帮助开发者创建相应的
*.jar
、 *.war
打包文件,同时对于插件的引用,在之前讲解的子模块定义中实际上还提供有另外的一种语法:
allprojects { // 所有模块/项目的通用配置
apply plugin: 'idea'
apply plugin: 'java' // 如果要想让 JDK 版本配置生效,必须要导入此插件
apply plugin: 'java-library'
}
- 如果在配置父子项目的时候,没有在父项目中明确的写如上的配置,那么很多的配置将会失效,所有的插件其内部都会带有一些特定配置以及操作的选项。
- Gradle 的常用插件:
- 随着 Gradle 版本的不断提升,以上所给出的一些插件就可能不能够在新版本的 Gradle 中使用了。
- 在 Gradle 的插件中提供有 PMD 的插件,其作用是为工程添加了 PMD 质量检测,PMD 是一种开源分析 Java 代码错误的工具,它是通过静态分析获取代码错误的。
1.2 插件引用
- 如果要想在项目中使用 PMD 插件,那么一定要在 build.gradle 配置文件中对插件进行引用配置:
plugins {
id 'java' // 配置的是一个 Java 插件(Java 项目)
id 'java-library'
id 'pmd' // 项目中已经具备了代码检测的能力
id 'maven-publish' // 必须配置 maven-publish 插件
}
1.3 代码不标准
- 代码的检测,实际上和开发工具内部的检测是非常相似的,如:有些变量可能仅仅定义了但是没有使用,所以可以考虑修改 MessageServiceImpl 程序:
package com.github.fairy.era.service.impl;
import com.github.fairy.era.service.IMessageService;
/**
* @author 许大仙
* @version 1.0
* @since 2021-12-21 08:42
*/
public class MessageServiceImpl implements IMessageService {
@Override
public String echo(String msg) {
int num = 10;
String userName = "许大仙";
return "hello " + msg;
}
}
- 此时,程序中的 num 和 userName 变量完全没有使用过,所以理论上这两个变量不符合开发的要求。
1.4 执行检测
- 通过 Gradle 的命令进行一下当前代码的检测操作。
- 程序执行命令:
gradle check
Execution failed for task ':pmdMain'.
> 2 PMD rule violations were found. See the report at: file:///D:/project/gradle-01/build/reports/pmd/main.html
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
- 此时的 PMD 插件已经检测出问题了,同时也给出了检测报告,让我们访问
file:///D:/project/gradle-01/build/reports/pmd/main.html
这个文件。
- 所有的插件直接在 plugins 之中配置即可,每当插件配置完成后就会出现新的任务以及新的各种支持。
第二章:gretty 插件
2.1 概述
- 很多的 WEB 项目如果开发完成后一般都会选择在 Tomcat、WebLogic 或 WebSphere 等专属的容器上运行,但是也有一些开发者希望程序可以直接独立运行,例如:SpringBoot 打包之后就自带有 WEB 容器,所以 Gradle 中就提供了一个 gretty 的插件,这个插件打包后可以直接独立运行 WEB 程序。
2.2 插件引用
- 在 WEB 项目的 build.gradle 配置文件中进行 gretty 插件的引用:
plugins {
id 'war' // 配置的是一个Web插件(Web项目)
id 'java' // 配置的是一个Java插件(Java项目)
id 'org.gretty' version '3.0.3' // 配置 gretty 插件
}
- 需要注意的是,如果直接在项目中直接去引用
org.gretty
插件可能会出现如下的错误信息:
Build file 'D:\project\gradle-02\build.gradle' line: 4
Plugin [id: 'org.gretty'] was not found in any of the following sources:
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
2.3 更换仓库
- 如果要想在项目中去使用 gretty 插件,还需要进行项目仓库的更换,修改 build.gradle 配置文件:
repositories { // 仓库配置
maven {
url 'https://maven.aliyun.com/repository/public'
}
mavenCentral()
}
2.4 依赖配置
- 因为 servlet 等使用的是 compileOnly 范围,所以还需要进行 canBeResolved 的配置:
plugins {
id 'war' // 配置的是一个Web插件(Web项目)
id 'java' // 配置的是一个Java插件(Java项目)
id 'org.gretty' version '3.0.3' // 配置 gretty 插件
}
group 'com.github.fairy.era' // 组织名称
version '1.0' // 版本号
sourceCompatibility = 1.8 // 源代码版本
repositories { // 仓库配置
maven {
url 'https://maven.aliyun.com/repository/public'
}
mavenCentral()
}
configurations { // 进行依赖的配置
implementation {
canBeConsumed = true
canBeResolved = true
}
compileOnly{
canBeConsumed = true
canBeResolved = true
}
}
dependencies { // 依赖管理
testImplementation group: 'junit', name: 'junit', version: '4.13.2' // junit 4.x
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1' // servlet
compileOnly group: 'javax.servlet.jsp', name: 'javax.servlet.jsp-api', version: '2.3.3' // jsp
}
tasks.withType(JavaCompile) { // 针对程序编译的任务进行配置
options.encoding = "UTF-8"
}
war {
archiveFileName = "${project.group}-${project.name}-${project.version}.war" // 手工设置 war 文件的名称
}
2.4 Gradle 任务
- 所有的插件配置完成之后都可以在项目中添加相应的任务,所以本次直接对当前的 WEB 程序打包。
- 程序执行命令:
gradle clean buildProduct
16:19:11: 正在执行 'buildProduct'…
> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
> Task :war
> Task :assemble
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check UP-TO-DATE
> Task :build
> Task :buildProduct
BUILD SUCCESSFUL in 18s
3 actionable tasks: 3 executed
16:19:29: 执行完成 'buildProduct'。
2.5 程序执行
- 当程序通过 gretty 插件打包完成之后会在 build/out 目录下存在有一组程序文件。
- windows 平台上执行 start.bat ,Linux 平台上执行 start.sh 。
2.6 浏览器访问
2.7 容器配置
- 在打包生成的 conf 目录下保存有配置文件,我们可以修改此配置文件实现端口的变更:
{
"productName": "gradle-02",
"servletContainer": {
"id": "jetty9.4",
"version": "9.4.24.v20191120",
"description": "Jetty 9.4.24.v20191120"
},
"serverConfig": {
"port": 80
},
"webApps": [
{
"contextPath": "/gradle-02",
"resourceBase": "webapps/com.github.fairy.era-gradle-02-1.0.war"
}
]
}
- greety 插件本质上就是一个 jetty 容器,早期版本的 Gradle 可以直接使用 jetty 插件,但是目前来说,已经过期了。
第三章:distribution 插件
3.1 概述
- 当项目开发完成之后肯定需要进行项目的打包发布,在之前进行项目发布的时候,常规的做法就是将所有的程序打包为
*.jar
或 *.war
文件,可是有的时候,需要打包的文件是 *.zip
或 *.tar.gz
程序包,这个时候就可以考虑使用 distribution 插件来帮助我们解决这些问题。
3.2 传统打包
- 在之前一个使用了 gretty 插件的项目,这个项目可以将所有的 WEB 程序直接打包成一个独立运行的 jetty 程序,但是之前打包完成之后得到的文件全部都是分散性的文件,现在需要将其打包为
*.tar.gz
的压缩包。
3.3 插件配置
- 修改 build.gradle 配置文件,在这个配置文件中引入 distribution 插件:
plugins {
id 'war' // 配置的是一个Web插件(Web项目)
id 'java' // 配置的是一个Java插件(Java项目)
id 'org.gretty' version '3.0.3' // 配置 gretty 插件
id 'distribution' // 配置 distribution 插件
}
3.4 打包配置
- 如果要想进行打包,肯定要生成一个最终的包文件名称,同时还需要设置好所有的输入路径,此时的输入路径为:
项目目录/build/output/gradle-02
,修改 build.gradle 配置文件:
distributions { // 定义打包的配置任务
main { // 定义相关的文件属性
distributionBaseName = 'gradle-02' // 生成的文件名称
contents { // 确定所有要打包的文件来源
from { "${buildDir}/output/gradle-02" }
}
}
}
3.5 打包类型
- 本次将程序包打包为
*.tar.gz
文件类型,所以还需要进行一些配置,修改 build.gradle 配置文件:
plugins.withType(DistributionPlugin) {
distTar {
compression = Compression.GZIP // 打包类型
archiveExtension = 'tar.gz' // 设置文件后缀
}
}
3.6 打包任务
- 定义相应的打包任务,修改 build.gradle 配置文件:
task buildTar(dependsOn: distTar) {
description = '自定义打包任务'
}
3.7 打包操作
gradle clean buildProduct
gradle buildTar
第四章:checkstyle 插件
4.1 概述
- checkstyle 是一款源代码规范化检测的开发插件,如果需要学习 checkstyle 之中的各种规范化的检测配置语法,可以登录其官网。
4.2 IDEA 代码标准
- 如果要想使用 checkstyle ,那么一定需要有一个完善的 XML 配置文件,在 IDEA 中并没有直接提供此配置文件,需要单独配置,该文件名为 intellij-java-google-style.xml intellij-java-google-style.zip ,只需要打开 IDEA 中的 配置界面即可进行配置。
4.3 checkstyle 配置
4.4 插件引入
- 修改 build.gradle 配置文件,在项目中导入 checkstyle 插件:
plugins {
id 'war' // 配置的是一个Web插件(Web项目)
id 'java' // 配置的是一个Java插件(Java项目)
id 'idea'
id 'org.gretty' version '3.0.3' // 配置 gretty 插件
id 'distribution' // 配置 distribution 插件
id 'checkstyle'
}
4.5 checkstyle 配置
- 修改 build.gradle 配置文件,进行 checkstyle 的相关定义:
checkstyle { // 进行 checkstyle 的相关配置
sourceSets = [sourceSets.main] // 对源代码进行代码检测
configFile = rootProject.file('config/checkstyle/checkstyle.xml') // 定义配置文件的位置
showViolations = true // 显示所有的违规行为
ignoreFailures = true // 忽略所有的失败
}
4.6 测试配置
- 既然是进行代码的检测,那么相关的代码测试就可以忽略了,修改 build.gradle 配置文件:
checkstyleTest { // 代码测试的配置
enabled = false // 不执行测试
}
4.7 checkstyle 任务配置
- 最终 checkstyle 一定会生成相关的检测报告,那么可以配置这个报告的名称和路径,修改 build.gradle 配置文件:
tasks.withType(Checkstyle) {
reports {
html.outputLocation.fileValue(rootProject.file('build/reports/checkstyle.html'))
}
}
4.8 Gradle 代码检测
- 直接通过 gradle 的命令对当前项目中的代码进行检测。
- 程序执行命令:
gradle clean check
> Task :clean
> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
> Task :checkstyleMain
[ant:checkstyle] [ERROR] D:\project\gradle-02\src\main\java\com\github\fairy\era\servlet\HelloServlet.java:1: 文件未以空行结尾。 [NewlineAtEndOfFile]
Checkstyle rule violations were found. See the report at: file:///D:/project/gradle-02/build/reports/checkstyle.html
Checkstyle files with violations: 1
Checkstyle violations by severity: [error:1]
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check
BUILD SUCCESSFUL in 709ms
3 actionable tasks: 3 executed
10:23:59: 执行完成 'clean check'。