新手学做网站 视频百度网盘,网站建设浅析,可以做签名链接的网站,那个做我女朋友的网站目录
一、前置说明
二、Gradle 启动#xff01;
2.1、安装
2.2、初始化项目
2.3、gradle 项目目录介绍
2.4、Gradle 项目下载慢#xff1f;#xff08;万能解决办法#xff09;
2.5、Gradle 常用命令
2.6、项目构建流程
2.7、设置文件#xff08;settings.gradle…目录
一、前置说明
二、Gradle 启动
2.1、安装
2.2、初始化项目
2.3、gradle 项目目录介绍
2.4、Gradle 项目下载慢万能解决办法
2.5、Gradle 常用命令
2.6、项目构建流程
2.7、设置文件settings.gradle.kts
2.8、构建脚本build.gradle.kts
Project 对象属性
插件部分
插件配置
application 插件生成可执行程序
仓库管理
依赖管理
2.9、自定义任务
2.10、生命周期钩子
2.11、项目发布
2.12、创建 SpringBoot 项目
2.13、多项目配置
多项目目录结构
项目创建
依赖传递
统一配置 一、前置说明 Ps如果不是因为某种必须原因建议学习 Maven 即可Gradle 的学习成本比 Maven 要高很多... 所需要具备的前置知识
熟悉 SpringBoot熟悉 Kotlin 语言.熟悉 Maven 依赖管理微服务多项目配置会讲到 二、Gradle 启动 2.1、安装
a安装之前确保安装好 Java 环境版本不能低于 Java 8这种远古版本就别用了本文使用 Java 17 . b进入 Gradle 官网下载 Gradle 8.5 版本Gradle 版本兼容性很差不同版本差异很大不建议轻易更换选择以编译好的 二进制 文件即可. 官网下载地址如下
https://gradle.org/releases/?_gl1*bycxul*_ga*MTkwMDMxNTMyMS4xNzAzNjkxNjA5*_ga_7W7NC6YNPT*MTcwMzc2MDE2OS4yLjEuMTcwMzc2MTE0OS4zNi4wLjA. c下载完后解压建议放到 C:/Program Files 目录下 d配置环境变量 e打开命令窗口输入 gradle -v 查看配置是否生效 2.2、初始化项目
a打开 cmd 窗口执行以下命令来初始化项目
gradle init
b出现以下内容让我们初始化项目类型选择 2 应用类型. c本文统一使用 Kotlin 语言讲解选择 4 号 d是否生成多个子项目结果. 这里我们先以最简单的单体项目来进行讲解选择 no 即可 e选择编写 gradle 脚本采用的语言这里使用 Kotlin 语言也是官方推荐的语言 f指定当前项目的名称以及包名默认是当前目录的名字. g选择 Java 版本这里使用 Java17输入 17 即可. h是否选择使用新特性选择 no 就可以了gradle 的兼容性真的很差...这样就完成了初始化. Ps不同版本的 Gradle 对 IDEA 版本同样存在兼容性的问题推荐使用 IDEA 2023.3 或者更高的版本. i使用 IDEA 打开这个项目打开后会进行初始化报考 Gradle 当前版本以及所需要的依赖包和 Kotlin 相关库.
但是我们本地不是已经安装 gradle 了么为什么又要下载一次
这是由于 gradle wrapper 的作用. 因为 gradle 的跨版本兼容性很差所以她指定了当前项目使用的 gradle 版本让不同开发人员或者 CI/CD 系统都能使用相同的 gradle 版本来构建项目. gradle wrapper 还有另外一个好处它可以自动下载和使用正确版本的 gradle无需手动安装或者配置 gradle使得团队协作更加方便. 后续别人拿到这个项目的时候不需要再系统中重新部署 gradle 环境.
如果初始化出现以下错误 说明你之前配置过 gradle 只需要去 file - settings 中配置一下以下信息即可 2.3、gradle 项目目录介绍 .gradleGradle自动生成的项目缓存目录。.idea这个是IDEA的项目配置目录跟Gradle生成的没关系无视掉就行。app存放整个项目的源代码、测试等这里面就是我们写代码的地方了使用 gradle 命的方式创建会出现此模块如果使用 IDEA 创建则不会出该现模块。 build.gradle.kts项目的gradle构建脚本。src存放源代码和测试代码。 main编写所有项目核心代码。test编写项目测试代码。gradle包含JAR文件和Gradle Wrapper的配置。gradlew适用于macOS和Linux的使用Gradle Wrapper执行构建的脚本这里的版本就是GradleWrapper指定的版本gradlew.bat适用于Windows的使用Gradle Wrapper执行构建的脚本。settings.gradle.kts定义子项目列表的项目配置文件也是最关键的设置文件。 gradle 在创建项目的时候给我们生成了一个主类用来测试
class App {val greeting: Stringget() {return Hello World!}
}fun main() {println(App().greeting)
}可以看到如下运行结果 2.4、Gradle 项目下载慢万能解决办法
腾讯云做的国内镜像
https://mirrors.cloud.tencent.com/gradle/ a解决 gradle 不同版本下载慢的问题修改当前项目的 gradle/wrapper/gradle-wrapper.properties 文件位置如下 修改内容如下
distributionBaseGRADLE_USER_HOME
distributionPathwrapper/dists
# 1.默认走如下地址由于停止了国内的 CDN下载速度特别慢
# distributionUrlhttps\://services.gradle.org/distributions/gradle-8.5-bin.zip
# 2.因此可以使用腾讯云提供的镜像下载速度极快
distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-8.5-bin.zip
networkTimeout10000
validateDistributionUrltrue
zipStoreBaseGRADLE_USER_HOME
zipStorePathwrapper/distsb解决依赖包下载慢的问题使用 阿里云 的镜像网站即可.
repositories {maven {setUrl(https://maven.aliyun.com/repository/public)}mavenLocal()mavenCentral()
}2.5、Gradle 常用命令
gradle 的构建项目的命令就是通过前面我们讲到 gradle 初始化的项目中包含两个构建脚本实现的分别是 gradle 和 gradle.bat前者是 mac 系统适用后者是 win 系统适用.
a首先来看一下 gradle 支持的所有任务可以通过以下命令来执行.
./gradlew.bat task
task 中包含了大量的命令操作如下
PS D:\codeRepositories\Gitee\java\gradle_test .\gradlew.bat task
Downloading https://mirrors.cloud.tencent.com/gradle/gradle-8.5-bin.zip
............10%.............20%............30%.............40%.............50%............60%.............70%.............80%............90%.............100%
Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
Directory D:\JDK8 (Windows Registry) used for java installations does not exist
Directory D:\JDK8 (Windows Registry) used for java installations does not existTask :tasks------------------------------------------------------------
Tasks runnable from root project gradle_test
------------------------------------------------------------Application tasks
-----------------
run - Runs this project as a JVM applicationBuild tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildKotlinToolingMetadata - Build metadata json file containing information about the used Kotlin tooling
buildNeeded - Assembles and tests this project and all projects it depends on.
classes - Assembles main classes.
clean - Deletes the build directory.
jar - Assembles a jar archive containing the classes of the main feature.
kotlinSourcesJar - Assembles a jar archive containing the sources of target kotlin.
testClasses - Assembles test classes.Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.Distribution tasks
------------------
assembleDist - Assembles the main distributions
distTar - Bundles the project as a distribution.
distZip - Bundles the project as a distribution.
installDist - Installs the project as a distribution as-is.Documentation tasks
-------------------
javadoc - Generates Javadoc API documentation for the main feature.Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project gradle_test.
dependencies - Displays all dependencies declared in root project gradle_test.
dependencyInsight - Displays the insight into a specific dependency in root project gradle_test.
help - Displays a help message.
javaToolchains - Displays the detected java toolchains.
kotlinDslAccessorsReport - Prints the Kotlin code for accessing the currently available project extensions and conventions.
outgoingVariants - Displays the outgoing variants of root project gradle_test.
projects - Displays the sub-projects of root project gradle_test.
properties - Displays the properties of root project gradle_test.
resolvableConfigurations - Displays the configurations that can be resolved in root project gradle_test.
tasks - Displays the tasks runnable from root project gradle_test (some of the displayed tasks may belong to subprojects).Verification tasks
------------------
check - Runs all checks.
checkKotlinGradlePluginConfigurationErrors - Checks that Kotlin Gradle Plugin hasnt reported project configuration errors, failing otherwise. This task always runs before compileKotlin* or similar tasks.
test - Runs the test suite.To see all tasks and more detail, run gradlew tasks --allTo see more detail about a task, run gradlew help --task taskBUILD SUCCESSFUL in 34s
1 actionable task: 1 executed
PS D:\codeRepositories\Gitee\java\gradle_test 这里我们主要来看一下下图中的命令 btask 中的第一个 run 命令会自动编译和运行项目拿出来单独执行效果如下 c如果将来我们修改了项目的内容需要重新编译就要先进行 clean 进行清理 d编写号 Java 项目之后第一步就是编译成 class 文件
./gradlew classes 此时就会在 app 目录下生成一个 build 目录此目录中就存在的是编译之后的文件了. e有些时候我们不想执行测试只想构建整个项目可以添加参数跳过
./gradlew build -x test f但是这样敲命令太烦人了IDEA 中已经包含了 Gradle 插件可以直接使用: 2.6、项目构建流程
gradle 项目构建流程 2.7、设置文件settings.gradle.kts
asettings.gradle.kts 是整个 Gradle 项目的入口用来定义所有子项目让他们参与到构件中.
因此
对于单个项目构建settings.gradle.kts 是可选的.对于多项目构建settings.gradle.kts 文件必须存在并配置定义所有的子项目. bsettings.gradle.kts 文件中gradle 会默认实例化一个 Settings 对象所有项目声明都是通过她来实现的.
settings.rootProject.name demo1
也可以省略掉 settings.
rootProject.name demo1
cSettings 对象
包含如下常用属性
属性描述buildCache项目构建所用缓存配置。plugins用于设置的插件。rootDir项目构建的根目录根目录是整个项目目录最外层。rootProject构建的根项目。settings返回设置对象。
包含以下方法可以调用
方法描述include()将指定名称的项目添加到构建列表中。includeBuild()添加指定路径上的其他Gradle项目到构建列表中。 d一般 Gradle 设置文件按照如下方式编写
// 当前项目的名称
rootProject.name demo1//每个子模块的名称没有子模块可以不写
include(aaa)
include(bbb)
include(ccc)e配置文件中的内容本质是对 Gradle API 方法的调用结合 Kotlin 中 {...} 语法Kotlin 中称为 lambda 2.8、构建脚本build.gradle.kts
Project 对象属性
在每一个 build.gradle.kts 文件中Gradle 都会为其创建一个 Project 实例对象可以直接使用.
group com.cyk
version 1.0-SNAPSHOT当然也可以省略 project
group com.cyk
version 1.0-SNAPSHOT此对象中还包含以下常见属性
属性类型描述nameString项目目录的名称。pathString该项目的完全限定名称。descriptionString该项目的描述。layoutProjectLayout通过此对象来访问项目中的关键位置。
另外常用属性还有一些是以 lambda 的形式来编写的往下走~
插件部分
plugins {kotlin(jvm) version 1.9.21application
}//也可以写成以下形式
plugins {id(org.jetbrains.kotlin.jvm) version 1.9.21id(application)
}kotlin 表示整个项目的所使用的插件而 application 是由官方内置的插件可以不用指定 version 而 kotlin 未被官方内置所以需要手动指定 version Gradle 才能在仓库中找到她.
插件配置
另外还可以对这些插件进行一些配置例如编译的目标版本是 jdk17
tasks.withTypeKotlinCompile {kotlinOptions.jvmTarget 17
}application 插件生成可执行程序
使用 application 插件它包含 java 插件的全部功能同样支持编译和打包并且支持生成可执行的应用程序.
plugins {kotlin(jvm) version 1.9.21application //引入 application 插件
}application {//配置主类(build.classes.kotlin 目录下的绝对路径)//注意: Main.kt 编译后生成的字节码文件名为 MainKt//指导生成可执行程序执行的入口mainClass.set(com.cyk.kt.MainKt)
}通过 build 命令构建以后可以看到 application 插件生效了生成了如下文件 这里我们只需要解压缩就能看到 application 插件生成的可执行程序 进入 bin 目录 双击运行 demo1.bat 即可运行建议可以先打开终端再打开该程序否则程序一闪而过 也可以直接通过 idea 提供的插件直接运行可执行程序如下 仓库管理
初始化 Gradle 项目之后默认是选择 Maven 中央仓库下载速度极慢慢到即使有梯子也不行因为 Gradle 关闭了国内的 cdn
repositories {mavenCentral()
}为了解决上述问题我们一般都是优先使用本地仓库本地仓库没有再去阿里云仓库速度快最后在考虑中央仓库.
repositories {mavenLocal() //本地仓库maven {setUrl(https://maven.aliyun.com/repository/public) //阿里云仓库(第三方仓库)}mavenCentral() //中央仓库
}依赖管理
a这里可以使用以下函数导入依赖
implementation导入依赖用于编译和运行生产代码。testImplementation导入依赖用于编译和运行测试代码。runtimeOnly仅在运行时可用比如 MySQL 驱动这类我们不需要在项目中直接使用但是在项目运行时有需要用到的依赖.api与 implementation 类似但是会暴露依赖项给项目所有模块多项目配置中详解compileOnly表示导入的依赖只在编译时可用编译完后不会将依赖打包.kapt用于添加 Kotlin 注解处理器依赖项。annotationProcessor用于添加 Java 注解处理器依赖项。androidTestImplementation用于添加Android测试时需要的依赖项。
b函数的参数就是一个字符串就是我们依赖的组、名称、版本号
org.junit:junit-bom:5.9.1 对应的组为 org.junit依赖名称为junit-bom版本号为5.9.1
c使用 implementation 添加依赖的步骤
去 https://mvnrepository.com/ 找到所需要的包直接复制粘贴到项目中
dependencies {testImplementation(kotlin(test))implementation(org.springframework.boot:spring-boot-starter:2.6.7)
}另外还可以分开编写 组、名称、版本提高可读性
dependencies {testImplementation(kotlin(test))implementation(org.springframework.boot, spring-boot-starter,2.6.7)
}在使用依赖时我们可能需要排除某些不需要的依赖或者与其他依赖冲突我们也可以对依赖进行排除操作
dependencies {testImplementation(kotlin(test))implementation(org.springframework.boot, spring-boot-starter,2.6.7) {//以 lambda 的形式排除依赖exclude(org.springframework.boot, spring-boot-starter-logging)}
}2.9、自定义任务
aGradle 上一个工作由多个任务来完成比如构建、编译、清理... 这些任务都由插件提供.
不引入任何插件的情况下只有一些内置任务 b引入 Kotlin / Java 插件之后就出现了 编译、构建、打包... 等任务.
plugins {kotlin(jvm) version 1.9.21application //引入 application 插件
}c如果觉得插件提供的任务不够还可以在 build.gradle.kts 中自定义添加.
注册任务需要使用 register 或 create 函数来完成例如如下
tasks.register(hi~) {//第一个参数是任务名称第二个参数是 lambda 编写的具体任务//任务包含一个完整的操作列表需要传入对应的 Action 到队列中这样便会依次执行doFirst { //向队列首部插入 Actionprintln(自定义任务开始)}doLast { //向队列尾部插入 Actionprintln(自定义任务结束)}
}刷新之后就出现了我们自定义的任务 效果如下 我们甚至还可以配置此任务所属的组以及描述信息 d另外我们还可以指定自定义任务的前置任务例如但我们点击自定义任务时先执行 build 命令如下
tasks.register(hi~) {//第一个参数是任务名称第二个参数是 lambda 编写的具体任务group builddescription 自定义任务~//指定前置任务为 builddependsOn(tasks.build)doFirst { //向队列首部插入 Actionprintln(task start~)}doLast { //向队列尾部插入 Actionprintln(task end~)}
}手动执行自定义任务后自动先触发 build 命令 e当然返回来也可以例如我们执行 build 命令时会先自动执行自定义任务 f在 gradle 中所有任务都是 Task 子类除了上述所写方式register我们也可以自己创建 Task 子类用来编写自定义任务类型
//继承 DefaultTask 来创建一个自定义的 HiTask 类
//这个类要么是可继承要么是 open要么是抽象类
open class HiTask: DefaultTask() {private var name: String fun user(name: String) {this.name name}TaskAction //添加TaskAction 注解来声明此函数为任务fun hi() {println(${name}: 最帅)}}//使用 register 来指明我们自定义的任务类型
tasks.registerHiTask(hi) {this.user(cyk) //此时 this 就是 HiTask
}效果如下 gGradle 还提供了一些内置任务类型例如复制任务
tasks.registerCopy(hello) { //这里使用Copy类型from(build/classes) //使用from和into设置复制的目录和目标位置into(test)dependsOn(tasks.build) //依赖一下build
}2.10、生命周期钩子
有时候我们希望在 Gradle 整个声明周期中不同时期执行一些操作就可以使用钩子函数类似 Vue 钩子.
构建初始阶段 gradle.settingsEvaluated() 完成项目的配置阶段之后调用只能定义在 setting.gradle 或 init.gradle 脚本中gradle.projectsLoaded() 所有项目加载之后调用只能定义在 setting.gradle 或 init.gradle 脚本中配置阶段 gradle.beforeProject() 每个项目完成配置之前调用只能定义在 setting.gradle 或 init.gradle 脚本中gradle.afterProject() 每个项目完成配置之后调用gradle.projectEvaluated() 所有项目全部完成配置之后调用gradle.afterEvaluate() 整个配置阶段完成后调用gradle.taskGraph.whenReady 全部任务图已经构建完成可以就绪后调用执行阶段 gradle.taskGraph.beforeTask 执行每一个任务之前调用gradle.taskGraph.afterTask 每一个任务执行完成之后调用gradle.buildFinished 整个构建全部结束后调用
例如我们可以利用这个特性来统计某一个任务的耗时 2.11、项目发布
我们可以将自己的 Gradle 项目发布到 Maven 仓库中这里以发布到本地仓库为例
publishing {publications {//Maven 坐标信息createMavenPublication(library) {groupId com.cykartifactId demo1version 0.0.1from(components[java]) // jar 包发布}}//指定发布仓库repositories {mavenLocal() //发布到本地 Maven 仓库}
}执行 publish 命令即可发布到本地仓库注意每次发布都更新一下版本号防止仓库中优先执行缓存 此时在 .m2 中就可以看到我们发布的项目了 2.12、创建 SpringBoot 项目
这里使用 IDEA 创建 Kotlin SpringBoot 项目就不用多说了... 注意选择 Gradle Kotlin DSL 即可
这里来看一下项目自动生成的 build.gradle.kts 文件
import org.jetbrains.kotlin.gradle.tasks.KotlinCompileplugins {id(org.springframework.boot) version 3.1.8 //SpringBoot 插件id(io.spring.dependency-management) version 1.1.4 //Spring 依赖管理插件kotlin(jvm) version 1.8.22kotlin(plugin.spring) version 1.8.22
}group com.cyk
version 0.0.1-SNAPSHOTjava {sourceCompatibility JavaVersion.VERSION_17 //配置 Java 源代码编译版本
}// Maven 仓库配置
repositories {maven {setUrl(https://maven.aliyun.com/repository/public)}mavenLocal()mavenCentral()
}// 依赖配置
dependencies {implementation(org.springframework.boot:spring-boot-starter-web)implementation(com.fasterxml.jackson.module:jackson-module-kotlin)implementation(org.jetbrains.kotlin:kotlin-reflect)testImplementation(org.springframework.boot:spring-boot-starter-test)
}//对 Kotlin 编译任务进行配置(告诉 Gradle 中所有类型为 KotlinCompile 任务然后进行配置)
tasks.withTypeKotlinCompile {//指定编译参数kotlinOptions {freeCompilerArgs -Xjsr305strict //JSR-305 是一组用于 Java 编程语言的注解用于提供更多的静态代码分析信息jvmTarget 17 //生成 JVM 字节码的目标版本}
}//让 Gradle 再执行测试时使用 Junit 平台
tasks.withTypeTest {useJUnitPlatform()
}2.13、多项目配置
多项目目录结构
一般分布式项目我们都会在一个项目中包含多个模块不同模块负责不同功能.
这里我们来看一下一般多模块的结构如下
xxx-parent
|
├── user-service
│ ...
│ └── build.gradle.kts
├── album-service
│ ...
│ └── build.gradle.kts
└── settings.gradle.ktssettings.gradle.kts 用于全局配置而 build.gradle.kts 用来对具体的模块进行配置. 项目创建
a新建一个简单的 project b接着就可以删除掉不需要的目录比如 src 目录、build.gradle.kts、gradlew 等. c右键 gradle-parent 然后创建子模块. Ps这里语言选择没有 Kotlin也可以先使用 Java 创建 d创建完后可以看到最外层的 settings.gradle.kts 文件自动为我们添加了模块. Ps此时我们在根项目中执行任何命令都会对全部子模块生效 e由于创建模块时不支持指定 Kotlin 语言因此我们先指定的 Java 语言.
这里就可以将 java 目录重命名为 kotlin 此时我们只需要随便创建一个 Kotlin 文件 他就会提示我们没有配置 Kotlin点击配置后IDEA 就会自动为我们配置 Kotlin 相关插件. 选择版本即可 依赖传递
a有时候我们需要在 子模块a 中引入 子模块b我们就可以在项目中通过 implementation(project(:xxx)) 来引入其他子模块如下 bgradle 项目通过 implementation 进行依赖传递存在这样一个问题
例如有三个模块a、b依赖 a、c依赖b
按照这个传递关系来说 c 是可以拿到 a 中的东西Maven 是支持的但实际上
b 能拿到 a 中的东西.c 能拿到 b 中的东西.但是 c 不能拿到 a 中的东西.
也就是说通过 implementation 进行依赖传递最多只能传递一层. Psgradle 为什么要这样设定呢因为这样编译时只需要处理一层速度就会非常快大部分情况下非常推荐使用 implementation 进行依赖导入. 但如果一定要是实现依赖传递的效果也不是不行只是需要使用另一个插件提供的方法来导入 统一配置
有些时候我可能每次创建一个子模块都要在 build.gradle.kts 中配置很多相同的配置例如 仓库地址、插件.......
因此我们可以直接在项目根目录下创建一个 build.gradle.kts 文件来编写统一配置
plugins {kotlin(jvm) version 1.8.22 apply false
}subprojects { //subprojects表示对所有的子项目生效apply(plugin kotlin)//定义插件需要使用apply来完成plugin{}在这里不行repositories { //定义自定义仓库地址maven {setUrl(https://maven.aliyun.com/repository/public)}mavenLocal()mavenCentral()}
}这样我们在子项目中就不用再配置相同的配置了.