gradle-问题备忘

一、安装

  1. 下载
  2. 解压
  3. 配置系统变量 %GRADLE_HOME% 指向解压路径,配置 path 变量,添加 %GRADLE_HOME%\bin
  4. 测试,输入命令 gradle -v 提示版本说明配置成功。

环境变量也可以不配置,在 IDE 中(如 Idea)指定路径即可。

二、异常及报错的解决方案汇总

⭐ 本地仓库配置参考

1
2
3
4
5
6
repositories {
mavenLocal()
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
mavenCentral()
jcenter()
}

⭐ 指定编译版本

可选,在 Idea 中可独立配置。

1
2
sourceCompatibility = 1.8
targetCompatibility = 1.8

⭐ 显示指定依赖版本

1
2
3
4
5
configurations.all {
resolutionStrategy {
force 'org.apache.tomcat.embed:tomcat-embed-core:8.5.39'
}
}

⭐ 如果使用了中文注释,编译时报错

添加 withType,编译时用 UTF-8 处理。

1
2
3
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}

Gradle 强制刷新依赖

问题描述

旧项目更换环境时由于 gradle 版本不一致导致项目初始化失败。

解决方案

强制刷新依赖,步骤如下:

1、删除 .gradle 目录,其中包含了旧版本的文件。

2、修改 gradle-wrapper.properties 文件的版本号,内容如下。例如旧环境使用 6.0.1,新环境使用 6.7.1

1
2
3
4
5
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

注意:仅修改版本即可,其他内容不变。

3、项目目录下执行如下命令

  • macOS:./gradlew build --refresh-dependencies

  • windows:gradlew build --refresh-dependencies

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ ./gradlew build --refresh-dependencies

Welcome to Gradle 6.7.1!

Here are the highlights of this release:
- File system watching is ready for production use
- Declare the version of Java your build requires
- Java 15 support

For more details see https://docs.gradle.org/6.7.1/release-notes.html

> Task :test
2021-01-21 04:03:10.262 INFO 633 --- [extShutdownHook] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
2021-01-21 04:03:10.263 INFO 633 --- [extShutdownHook] o.s.s.quartz.SchedulerFactoryBean : Shutting down Quartz Scheduler
2021-01-21 04:03:10.263 INFO 633 --- [extShutdownHook] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
2021-01-21 04:03:10.263 INFO 633 --- [extShutdownHook] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
2021-01-21 04:03:10.263 INFO 633 --- [extShutdownHook] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
2021-01-21 04:03:10.264 INFO 633 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'

BUILD SUCCESSFUL in 1m 18s
6 actionable tasks: 6 executed

扩展

gradlew -? 或 -h 或 --help,显示帮助信息,即会打印可选参数及参数说明信息;

gradlew --version,版本号(会打印工程用的 Gradle 的版本号、Kotlin、Groovy、Ant、JVM、OS 等的版本号);

gradlew tasks --all,查看所有任务,包括缓存任务等;

gradlew clean,清除工程目录下的 build 文件夹;

gradlew build, 检查依赖并编译打包,debug、release 环境的包都会打出来;

gradlew assemble**_,编译指定的包,如 Debug 包(gradlew assembleDebug)、Release 包(gradlew assembleRelease)、渠道包(gradlew assembleOemRelease/assembleOemDebug)、定制的版本等等;

gradlew install_**,编译并安装指定的包,如 Debug 包(gradlew installDebug)、Release 包(gradlew installOemRelease/installOemDebug)、定制的版本等等;

gradlew uninstall\*\*,卸载已安装的指定模式的包,如 Debug 包(gradlew uninstallDebug)、Release 包(gradlew uninstallRelease)、渠道包(gradlew uninstallOemRelease/uninstallOemDebug)、定制的版本等等;

gradlew :模块名称:dependencies,查看包依赖关系,如 gradlew :app:dependencies

gradlew build -i 或 --info -d 或 --debug -s 或 --stacktrace,编译(build)并打印 debug 模式和 info 等级的日志及所用异常的堆栈信息(–stacktrace);

gradlew --refresh-dependencies,强制刷新依赖,即检查依赖是否有更新比如动态版本、SHA1 进行本地 cache 和远程仓库散列码的对比等,有更新则下载更新进行构建;使用这种方式可以避免手动删除 cache;

gradlew clean build --refresh-dependencies,组合指令,清除构建(gradlew clean)并重新构建(gradlew build),同时强制刷新依赖(gradlew –refresh-dependencies);

gradlew --offline,离线模式,即让 Gradle 只使用本地 cache 里的依赖,如果 cache 中没有也不会更新依赖,而是提示编译失败;

--info,打印堆栈信息;

gradlew --daemon,守护进程,使用 Gradle 的守护进程构建,能够提高构建效率,如果守护进程没启动或现有的都处于忙碌状态,就启动一个守护进程;

gradlew --no-daemon,如果你已经配置为使用守护进程构建,可以使用该选项本次不用守护进程构建;

gradlew --continuous,连续构建,即任务队列中即使某个任务失败,不会终止执行,而是会继续执行下一个任务;

gradlew --parallel --parallel-threads=N,并行编译;

gradlew --configure-on-demand,按需编译。

其他

gradlew 的指令有简写的方式:

gradlew --versio n 可以用简写方式 gradlew -v 代替

gradlew --hel p 可以用简写方式 gradlew - hgradlew -? 代替

gradlew --no-rebuil d 可以用简写方式 gradlew - a 代替

gradlew --debu g 可以用简写方式 gradlew - d 代替

gradlew --stacktrac e 可以用简写方式 gradlew -s 代替

可以发现简写的指令只需要一个减号(-)开头,没有简写的指令需要用两个减号(即 --)开头。