buildSrc使用kotlin开发plugin配置

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 {}前面。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值