IntelliJ IDEA关联gradle源码
- 创建一个gradle项目,包含gradle和groovy依赖
-
新建一个buildSrc的module——默认的自定义task和plugin在这个目录进行编译
-
在buildSrc的build.gradle中添加对gradle和groovy的api的依赖(否则依赖gradle的api时,编译会失败)
dependencies { compile gradleApi() compile localGroovy() } -
配置gradle:
-
配置环境变量,默认在C:/用户/用户名/.gradle/wrapper/dists/,有多个版本,选择gradle-xxxx-all/xxx/gradle-xxx/bin添加到系统环境变量的path变量中
(all是带源码)
运行
gradle wrapper --gradle-version 5.6.2 --distribution-type all -
或者配置gradle wrapper,gradle/wrapper/gradle-wrapper.properties 中的distributionUrl配置成带-all的版本
运行
gradlew.bat wrapper
-
-
以上完成后,运行gradle build,可以关联gradle源码,如:
- 在build.gradle中点dependencies等可以跳转到对应的源码
- 在buildSrc下新建groovy文件,在其中依赖gradle的api,如继承DefaultTask,可以查看它的源码
-
编译过程中gradle build如果报错:
* What went wrong: Execution failed for task ':buildSrc:compileGroovy'. > java.lang.ExceptionInInitializerError (no error message)可以运行gradle build --stacktrace查看错误堆栈,如果是如下错误:
Caused by: groovy.lang.GroovyRuntimeException: Conflicting module versions. Module [groovy-all is loaded in version 2.5.4 and you are trying to load version 2.3.7 ... 24 more说明gradle依赖的版本和build.gradle中依赖的版本不一致
可以查看gradle依赖的groovy的版本
然后将build.gradle中的groovy的版本改成跟它一样即可。
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.5.4'
compile gradleApi()
compile localGroovy()
testCompile group: 'junit', name: 'junit', version: '4.12'
}
-
如果没有其他问题,应该就可以依赖gradle的api,并且可查看源码
package com.hero.test import org.gradle.api.DefaultTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputFile import org.gradle.api.tasks.OutputFile import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.Optional class LogTask extends DefaultTask { @InputFile File inputFile @InputFile File xslStyleFile @Input @Optional Map<String, String> params = [:] @OutputFile File outputFile LogTask() { onlyIf { inputFile.exists() } } @TaskAction void start() { ant.xslt(in: inputFile, style: xslStyleFile, out: outputFile) { params.each { key, value -> ant.param(name: key, expression: value) } } } }