登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
构建工具Gradle入门实践
构建工具Gradle入门实践
[ 复制链接 ]
昆拗干
前天 02:15
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
Gradle概述
Gradle是跟Apache Maven类似的项目构建工具,同时也用于管理项目依赖。
Gradle相比较Maven具备如下特性:
灵活性:Gradle的设计方式使其在最基本层面上可扩展,还可以用于使用C/C++的原生开发,并且可以扩展到涵盖任何生态系统
性能:对各种项目在常见场景中进行了性能测量,Gradle比Maven快100倍
依赖管理:Gradle允许自定义依赖项范围,这提供了更好的建模和更快的构建
Gradle核心概念
Gradle的核心概念:
项目
Gradle项目是一个可以构建的软件,例如应用程序或库
单项目构建包括一个称为根项目的单一项目
多项目构建包括一个根项目和任意数量的子项目
依赖项和依赖管理
依赖管理是一种自动化技术,用于声明和解析项目所需的外部资源
每个项目通常包含许多Gradle在构建期间解析的依赖项
构建脚本
构建脚本详细说明了Gradle构建项目所需的步骤
每个项目可以包含一个或多个构建脚本
Gradle脚本可以使用Groovy DSL或Kotlin DSL编写
任务
任务是工作的基本单位,例如编译代码或运行测试
每个项目包含一个或多个在构建脚本或插件中定义的任务
插件
插件用于扩展Gradle的功能
插件可选择性地为项目贡献任务
Gradle项目结构
使用Gradle作为构建工具的项目结构(以构建脚本使用Groovy DSL编写为例)如下:
Project
|--.gradle # Gradle生成的特定于项目的缓存目录
| |--:
|--gradle # 包含Gradle Wrapper的JAR文件和配置
| |--libs.versions.toml # 版本目录,用于在中心位置定义一组依赖项的版本
| |--wrapper
| |--gradle-wrapper.jar
| |--gradle-wrapper.properties
|--gradlew # 用于使用Gradle Wrapper执行构建的macOS和Linux脚本
|--gradlew.bat # 用于使用Gradle Wrapper执行构建的Windows脚本
|--settings.gradle # 项目的设置文件,其中定义了子项目列表
|--app # Java应用程序的源代码和构建配置目录
| |--build # Java应用程序构建输出目录
| |--src # Java应用程序源代码目录
| |--main
| |--test
| |--build.gradle # Java应用程序的构建配置文件
|--: # 可能存在一些额外的Git文件,例如:.gitignore或.gitattributes
复制代码
Gradle管理的目录
Gradle使用两个主要目录来执行和管理其工作:
Gradle用户主目录
项目根目录
Gradle用户主目录
Gradle用户主目录可以通过环境变量GRADLE_USER_HOME进行设置,可以类比为Maven的.m2目录。
Gradle用户主目录存储全局配置属性、初始化脚本、缓存和日志文件,默认情况下它的路径如下:
Mac或Linux系统下为:~/.gradle
Windows系统下为: C:\Users\\.gradle
Gradle用户主目录内容随着版本的不同而有所差异,大致结构如下:
.gradle
|--caches # 全局缓存目录(用于非项目特定的所有内容)
| |--8.5 # 版本特定的缓存(例如,支持增量构建)
| |--modules-2 # 共享缓存(例如,用于依赖项的 artifact)
|--daemon # Gradle Daemon 的注册表和日志
| |--8.5
|--wrapper # Gradle Wrapper下载的发布版
复制代码
项目根目录
使用Gradle作为构建工具的项目根目录包含项目的所有源文件,它还包含Gradle生成的文件和目录,例如:.gradle和build。
关于项目根目录的结构详见Gradle项目结构。
Gradle实践
安装Gradle
如下以在Windows系统中手动安装Gradle为例阐述。
由于不同的Gradle版本依赖的JDK版本所有不同,根据实际需要参考Gradle版本与JDK版本的对应关系从这里下载对应版本的Gradle安装包。
将Gradle安装包(例如只下载二进制文件:gradle-${VERSION}-bin.zip)解压到指定目录后设置环境变量:GRADLE_USER_HOME路径(如果不明确设置则默认路径为~/.gradle)。
初始化项目
如下以在Windows系统中初始化一个Java项目(项目名称为:test-gradle,安装的Gradle版本为gradle-8.5,Gradle脚本以Groovy DSL编写)为例进行说明。
# 创建目录
mkdir test-gradle
cd test-gradle
# 使用以下参数运行 gradle init 以生成 Java 应用程序
# 在执行这一步时会使用Gradle Wrapper初始化项目,如果在$GRADLE_USER_HOME/.gradle/wrapper/dists/gradle-8.5-bin/XXXXXXXXXXXXXXXXXXXXXXXXX/目录下不存在文件gradle-8.5-bin.zip,Gradle会尝试下载
# 但是由于防火墙的关系可能无法正常下载gradle-8.5-bin.zip,此时可以手动将gradle-8.5-bin.zip拷贝到该目录下后再次执行
gradle init --type java-application --dsl groovy
复制代码
特别说明:
在执行命令gradle init --type java-application --dsl groovy时,会使用Gradle Wrapper初始化项目,如果在$GRADLE_USER_HOME/.gradle/wrapper/dists/gradle-8.5-bin/XXXXXXXXXXXXXXXXXXXXXXXXX/目录下不存在文件gradle-8.5-bin.zip,Gradle会尝试下载。但是由于防火墙的关系可能无法正常下载gradle-8.5-bin.zip,此时可以手动将gradle-8.5-bin.zip下载并拷贝到该目录下后再次执行项目初始化命令。
接下来在命令行中根据提示步骤进行操作即可生成一个完整的Gradle项目结构:
Starting a Gradle Daemon (subsequent builds will be faster)
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4] 1 # 这里选择1使用JUnit 4作为单元测试框架
Project name (default: test-gradle): # 这里直接回车适应默认项目名
Source package (default: test.gradle): # 这里直接回车使用默认包名
Enter target version of Java (min. 7) (default: 11): # 这里直接回车使用系统默认的JDK版本
Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] # 这里输入no
> Task :init
To learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.5/samples/sample_building_java_applications.html
BUILD SUCCESSFUL in 31s
2 actionable tasks: 2 executed
复制代码
生成的项目结构如下:
test-gradle
|--.gradle
|--app # Java应用程序模块目录
| |--src # Java应用程序源代码目录
| | |--main
| | |--test
| |--build.gradle # Java应用程序的构建配置文件
|--gradle # 包含Gradle Wrapper的JAR文件和配置
| |--libs.versions.toml # 用于在中心位置定义一组依赖项的版本
| |--wrapper #
|--.gitattributes
|--.gitignore
|--gradlew # 用于使用Gradle Wrapper执行构建的macOS和Linux脚本
|--gradlew.bat # 用于使用Gradle Wrapper执行构建的Windows脚本
|--settings.gradle # 项目的设置文件,其中定义了子项目列表
复制代码
在IDEA中打开项目,如下图:
注意:
在IDEA中默认的Gradle用户主目录为C:\Users\\.gradle,如下图:
需要将该参数设置为$GRADLE_USER_HOME环境变量指向的路径,如:E:\.gradle。
添加项目模块
使用gradle init命令初始化项目时默认生成了一个名为app的模块,如果需要添加新的模块,可以在IDEA中进行图形化操作。
执行上述操作后,将会在项目配置文件settings.gradle中添加一行新的配置:include 'client',表示将新添加的目录(名称为client)作为一个Gradle模块添加到根项目中。
rootProject.name = 'test-gradle'
include('app')
include 'client'
复制代码
添加依赖
项目中的依赖项在配置文件test-gradle/gradle/libs.versions.toml中进行统一管理,需要添加的依赖配置也在该文件中进行配置即可。
[versions]
guava = "32.1.2-jre"
junit = "4.13.2"
okhttp2 = "2.7.5" # 在这里指定依赖项版本
[libraries]
okhttp2 = {module = "com.squareup.okhttp:okhttp", version.ref = "okhttp2" } # 在这里配置具体的依赖项参数
复制代码
然后在新添加的模块(名称为client)中引用依赖项(在配置文件test-gradle/client/build.gradle):
dependencies {
implementation libs.okhttp2
}
复制代码
最后在client中引用依赖API,如下:
OkHttpClient mOkHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
.url("https://www.baidu.com")
.build();
Response response = mOkHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
System.out.println(response.body().string());
}
复制代码
应用插件
可以使用Gradle插件来完成相应任务,比如:将项目构建为可运行应用程序,代码风格检查等等。
Gradle插件按类型可以分为3类:
脚本插件:可重用的.gradle或.gradle.kts文件,使用apply from:应用
预编译插件:打包的Kotlin或Groovy代码,使用plugins {}块应用
二进制插件:打包并发布的插件(通常来自插件门户或Maven),使用plugins {}块应用
预编译插件和二进制插件更加常用。
更多Gradle插件信息详见:插件基础,Gradle 插件参考。
在Gradle插件中通常会定义许多任务,可以通过执行指定任务来完成特定工作。
执行Gradle任务有2种方式:
在命令行中执行,例如:在Windows系统中可以执行gradlew.bat :app:jar来实现对app模块打包
在IDEA集成开发环境中,在Gradle面板中双击执行Tasks节点下相应任务
使用java插件
如果希望将Gradle项目模块打包成可运行的jar包,可以使用java插件实现。
// test-gradle\app\build.gradle
plugins {
id 'java'
}
// 配置jar任务
jar {
// 1. 指定主类(替换为你的主类全限定名,如 com.example.Main)
manifest {
attributes 'Main-Class': 'test.gradle.App'
}
// 2. 打包所有运行时依赖到Jar中(避免运行时ClassNotFoundException)
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
// 3. 解决META-INF文件重复冲突
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
复制代码
运行任务gradlew.bat :app:jar即可在test-gradle\app\build\libs路径下生成可执行文件:app.jar。
使用application插件
application插件使得在开发过程中在本地启动应用程序以及将应用程序打包为TAR或ZIP(包括特定于操作系统的启动脚本)变得容易,所以该插件几乎是每一个Gradle项目必备。
// test-gradle\app\build.gradle
plugins {
id 'application'
}
application {
// 指定应用程序的主类(即入口点)
mainClass = 'test.gradle.App'
}
复制代码
运行任务:gradlew.bat :app:distZip即可在test-gradle\app\build\distributions路径下生成可通过脚本启动应用的程序压缩包:app.zip。
其他事项
Gradle不同版本之间存在使用差异,因此一定要找到对应版本的文档进行查阅才是最准确的,参考:Gradle 8.5版本官方文档 。
中文版文档未明确区分版本,所以在查阅时某些配置或命令的用法可能存在疑惑,以指定版本的文档为准,参考:Gradle 中文版文档(未区分Gradle版本)。
另外,不同的Gradle版本依赖的最低Java版本也不同,需要下载对应项目使用Java版本匹配的Gradle,否则使用过程中可能会出现报错,详见:Gradle版本与Java版本的对应关系
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
构建
工具
Gradle
入门
实践
相关帖子
MySQL 从入门到删库跑路,保姆级教程!
MAF快速入门(4)多Agent工作流编排
Flask入门实战:轻松掌握模板渲染与静态文件加载
关于音频处理工具FFmpeg | 笔记备注
口袋里的 AI 实验室:如何构建一套“永不掉线”的 Claude Code 移动工作流
火车头采集软件工具24直播网下载
Markdown是什么?Markdown语法大全-Markdown从入门到精通
如何通过无代码平台构建高效智能体 — AgenticHub的革命性创新
Kubernetes集群的搭建与DevOps实践(上)- 架构设计篇
股票资金流向获取工具!无限制查询,Hawk下载介绍
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
MySQL 从入门到删库跑路,保姆级教程!
0
768
都淑贞
2025-12-02
业界
MAF快速入门(4)多Agent工作流编排
1
150
赖珊
2025-12-02
业界
Flask入门实战:轻松掌握模板渲染与静态文件加载
0
891
祖柔惠
2025-12-03
业界
关于音频处理工具FFmpeg | 笔记备注
0
25
墨淳雅
2025-12-03
安全
口袋里的 AI 实验室:如何构建一套“永不掉线”的 Claude Code 移动工作流
0
588
存叭
2025-12-04
软件
火车头采集软件工具24直播网下载
0
10
新程序
2025-12-05
安全
Markdown是什么?Markdown语法大全-Markdown从入门到精通
0
303
靛尊
2025-12-05
安全
如何通过无代码平台构建高效智能体 — AgenticHub的革命性创新
0
609
搜娲瘠
2025-12-05
业界
Kubernetes集群的搭建与DevOps实践(上)- 架构设计篇
0
134
箝德孜
2025-12-06
科技
股票资金流向获取工具!无限制查询,Hawk下载介绍
0
424
颛孙中
2025-12-06
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
昆拗干
前天 02:15
关注
0
粉丝关注
21
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994893
kk14977
6845355
3934307807
991122
4
xiangqian
638210
5
宋子
9987
6
闰咄阅
9991
7
刎唇
9993
8
俞瑛瑶
9998
9
蓬森莉
9952
10
匝抽
9986
查看更多