buildSrc使用kotlin开发plugin配置
配置
apply plugin: 'java-gradle-plugin'
apply plugin: 'kotlin'
buildscript {
repositories {
mavenLocal()
maven {
url uri("${rootProject.rootDir}/.repo")
}
maven { url 'https://maven.aliyun.com/nexus/content/groups/public' }
maven { url 'https://jitpack.io' }
maven { url 'https://dl.google.com/dl/android/maven2/' }
google()
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
}
}
Properties props = new Properties()
props.load(project.file('../gradle.properties').newDataInputStream())
def isDebugLintPlugin = props.getProperty('DEBUG_LINT_PLUGIN')
def gradlePluginVersion = props.getProperty('gradlePluginVersion')
println "isDebugLintPlugin ${isDebugLintPlugin} gradlePluginVersion ${gradlePluginVersion}"
repositories {
mavenLocal()
maven {
url uri("${rootProject.rootDir}/.repo")
}
maven { url 'https://maven.aliyun.com/nexus/content/groups/public' }
maven { url 'https://jitpack.io' }
maven { url 'https://dl.google.com/dl/android/maven2/' }
google()
mavenCentral()
}
dependencies {
// //gradle sdk
// implementation gradleApi()
// //groovy sdk
// implementation localGroovy()
testImplementation 'junit:junit:4.13.2'
implementation "com.android.tools.build:gradle:${gradlePluginVersion}"
compileOnly 'com.google.android:android:4.1.1.4'
}
gradlePlugin {
// Define the plugin
plugins {
MyLintPlugin {
id = 'com.lkl.lint.MyLintPlugin'
implementationClass = 'com.lkl.android.lint.plugin.MyLintPlugin'
}
}
}
sourceSets {
main {
if (isDebugLintPlugin) {
kotlin.srcDirs += "${project.rootDir.parent}/Lint/LintPlugin/src/main/kotlin"
resources.srcDirs += "${project.rootDir.parent}/Lint/LintPlugin/src/main/resources"
println "add lintPlugin src"
}
}
}
配置的关键点是buildscript
的配置,否则会出现如下的相关问题:
遇到的问题
Plugin with id ‘kotlin’ not found.
Build file '/Users/likunlun/Android/Projects/AndroidLint/buildSrc/build.gradle' line: 2
A problem occurred evaluating project ':buildSrc'.
> Plugin with id 'kotlin' not found.
我们在其他的module里都是可以正常的found,这个是由于没有引用对应的classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
,但是这个我们在项目根目录下的build.gradle
里已经加上了,为啥buildSrc
里还是会出现 not found 呢?
我们分别在buildSrc
里的build.gradle
里加上如下打印:
println(“buildSrc config”)
项目根目录下的build.gradle
里加上如下打印:
println(“root config”)
我们执行一下编译指令:
abc:AndroidLint likunlun$ gradlew assemble
> Configure project :buildSrc
buildSrc config
isDebugLintPlugin true gradlePluginVersion 4.1.2
add lintPlugin src
> Configure project :
root config
> Configure project :app
从上面的打印可以看出,buildSrc
下的build.gradle
优先于根目录下的build.gradle
执行。
解决方案,我们在buildSrc
里的build.gradle
添加如下代码:
buildscript {
repositories {
mavenLocal()
maven {
url uri("${rootProject.rootDir}/.repo")
}
maven { url 'https://maven.aliyun.com/nexus/content/groups/public' }
maven { url 'https://jitpack.io' }
maven { url 'https://dl.google.com/dl/android/maven2/' }
google()
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
}
}
all buildscript {} blocks must appear before any plugins {} blocks in the script
Build file '/Users/likunlun/Android/Projects/AndroidLint/buildSrc/build.gradle' line: 10
Could not compile build file '/Users/likunlun/Android/Projects/AndroidLint/buildSrc/build.gradle'.
> startup failed:
build file '/Users/likunlun/Android/Projects/AndroidLint/buildSrc/build.gradle': 10: all buildscript {} blocks must appear before any plugins {} blocks in the script
出现该问题是我们的plugins {}
代码块放到了buildscript {}
之前,我们可以有以下解决方案:
- 我们可以把
plugins {}
替换为apply plugin: 'kotlin'
这样的; - 也可以调整一下
plugins {}
、buildscript {}
的顺序,将buildscript {}
放到plugins {}
前面。