
gradle简介
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具,它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。
- build.gradle:等价于maven的pom.xml。
- gradle.properties:定义一些常量供build.gradle使用。
- settings.gradle:用来配置多模块,例如:include ':module-a',':module-b'。
- gradle文件夹:这里面有两个文件,gradle-wrapper.jar和gradle-wrapper.properties,它们就是gradle wrapper,以通过命令gradle init来创建它们。
- gradlew和gradlew.bat:这分别是linux下的shell脚本和windows下的批处理文件,它们的作用是根据gradle-wrapper.properties文件中的distributionUrl下载对应的gradle版本。
- gradle仓库:gradle有三种仓库,maven仓库,ivy仓库以及flat本地仓库。
maven{
url "..."
}
ivy{
url "..."
}
flatDir{
dirs 'xxx'
}
repositories{
mavenCentral()
jcenter()
mavenLocal()
}
问题描述
突然有一天,当我想启动项目的时候,发现无法启动了,并且好像也没啥日志...然后我尝试着clean一下,竟然clean都失败..才意识到这个问题好像以前没见过。
继续执行build命令,也是一样failed,找到仅有的一点日志:Start Gradle Daemon ...
问题分析
检查了一下项目用的gralde的一些信息,发现了一些基本gradle配置信息,如下图:

我们项目用的方式是解析gradle-wrapper.properties,根据里面distributionUrl的属性值:https://services.gradle.org/distributions/gradle-4.7-bin.zip 去下载对应版本的gradle用来build和run,也可以指定本机安装的gradle,看自己选择。下面gradle JVM 配置的是JDK的路径,一开始检查,感觉配置都没有问题的,都没有改过,怎么突然就不行了...又去执行了build,再看下日志:Start Gradle Daemon ...看这几个字,看了好久,好像看到了一点东西:难道是gradle的守护线程启动不了了,被啥阻塞住了?
其实这个时候你可以用jps和jstack命令去看下线程栈,会发现确实有很多阻塞住的线程,好像是和jdk有关的,这其实能够推断出还是和jdk有点关系。下面这个图证明了这一点:

关键线索就是图上的那句话,当时程序报错的时候,这个home的路径指向的是jdk/jre ,不是根目录。重修修改之后,就正常了...
总结:静下心来,顺腾摸瓜。问题碰的多了,思考的多了,总结的多了,有些东西自然就清楚了,什么事情都需要有个过程。
网友评论