文章目录 gradle--问答 问答 gradle源码在哪 gradle脚本里默认帮我们import了什么 gradle有哪些核心插件 如何查看插件源码 如何查看任务之间的依赖? build.gradle里使用的插件的jar究竟放置在哪里? 你会不会好奇在build.gradle里完全看不出springboot依赖的版本信息,那么版本管理具体是在哪里指定的呢? 各个gradle文件是在哪个阶段被执行的呢 如何获取gradle.properties的属性 参考
gradle–问答
本文收录了常见的关于gradle相关的疑惑,希望可以帮到你
问答
gradle源码在哪
当我们在gradle-wrapper.properties中指定gradle版本后(注意gradle-xxx-all.zip才会下载源码,否则只是二进制包),同步时gradle就会自动帮我们下载 windows默认放置在:C:\Users(用户名).gradle\wrapper\dists
gradle脚本里默认帮我们import了什么
可以查看官方说明:script-default-imports
gradle有哪些核心插件
gradle内置了很多核心插件,这些插件可以在gradle源码中找到,比如我们经常用到的java插件
apply plugin : java
其在源码的路径为 \src\plugins\org\gradle\api\plugins\JavaPlugin.java 都说到这里了,其他核心插件你还会不知道吗
如何查看插件源码
这里以android为例 android的开发肯定对这个插件很熟悉
plugins { id 'com.android.application'
}
在使用这个插件之前我们必须配置一下构建脚本的classpath,只有这样我们的gradle脚本才能找到com.android.application这个插件
buildscript { repositories { google ( ) mavenCentral ( ) } dependencies { classpath "com.android.tools.build:gradle:7.0.4" }
}
从这里其实我们大概就可以猜到这个插件肯定是从classpath "com.android.tools.build:gradle:7.0.4"
获取到的,那么我们便可以在依赖中加上它
dependencies { implementation 'androidx.appcompat:appcompat:1.4.0' ... implementation 'com.android.tools.build:gradle:7.0.4'
}
加完后同步一下,便可以看到多了这些 很快便能找到具体的插件实现类就是AppPlugin
如何查看任务之间的依赖?
命令行输入“gradle(w) taskname -m”,如gradlew build -m
即可查看到任务build之前需要执行的任务列表。
build.gradle里使用的插件的jar究竟放置在哪里?
Mac系统默认下载到:/Users/(用户名)/.gradle/caches/modules-2/files-2.1 Windows系统默认下载到:C:\Users(用户名).gradle\caches\modules-2\files-2.1
你会不会好奇在build.gradle里完全看不出springboot依赖的版本信息,那么版本管理具体是在哪里指定的呢?
windows用户在C:\Users(用户名).gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-dependencies目录下可以找到答案,当我们打开spring-boot-dependencies-x.x.x.RELEASE.pom文件,版本信息一目了然
各个gradle文件是在哪个阶段被执行的呢
setting.gradle是在初始化阶段执行,build.gradle是在配置阶段执行 但build.gradle里的任务是有不同阶段的执行,如下
println ( "This is executed during the configuration phase." ) tasks. register ( "configured" ) { println ( "This is also executed during the configuration phase, because :configured is used in the build." )
} tasks. register ( "test" ) { doLast { println ( "This is executed during the execution phase." ) }
} tasks. register ( "testBoth" ) { doFirst { println ( "This is executed first during the execution phase." ) } doLast { println ( "This is executed last during the execution phase." ) } println ( "This is executed during the configuration phase as well, because :testBoth is used in the build." )
}
如何获取gradle.properties的属性
gradle.properties文件主要是存储键值对的 如果想配置gradle系统的一些参数,可以查看官方说明:Build Environment gradle.properties的键值对是全局的,在工程下的每个build.gradle或setting.gradle中都可以通过 ${xxx} 引用到,或者通过project.hasProperty(“xxx”)
参考
从Android Plugin源码开始彻底理解gradle构建:初识AndroidDSL(一)_verymrq的博客-CSDN博客