buildSrc使用kotlin开发plugin配置

news/2024/5/20 5:08:09 标签: kotlin, android, gradle, buildSrc, script

buildSrckotlinplugin_0">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的配置,否则会出现如下的相关问题:

遇到的问题

kotlin_not_found_80">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"
    }
}

script__blocks_must_appear_before_any_plugins__blocks_in_the_script_134">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 {}前面。

http://www.niftyadmin.cn/n/1268689.html

相关文章

Leetcode 950:按递增顺序显示卡牌(超详细的解法!!!)

牌组中的每张卡牌都对应有一个唯一的整数。你可以按你想要的顺序对这套卡片进行排序。 最初,这些卡牌在牌组里是正面朝下的(即,未显示状态)。 现在,重复执行以下步骤,直到显示所有卡牌为止: …

Leetcode 951:翻转等价二叉树(超详细的解法!!!)

我们可以为二叉树 T 定义一个翻转操作,如下所示:选择任意节点,然后交换它的左子树和右子树。 只要经过一定次数的翻转操作后,能使 X 等于 Y,我们就称二叉树 X 翻转等价于二叉树 Y。 编写一个判断两个二叉树是否是翻转…

loss值多少才算收敛_跑步机燃烧180卡路里够吗?跑步机燃烧多少卡路里才算减肥...

跑步机燃烧180卡路里够吗?在跑步机上燃烧180卡路里的热量可能或可能不足以达到你的健身或减肥目标,这具体取决于你一天中其余时间的运动和饮食情况。 在饮食和运动之间找到适当的平衡点是相对比较难的,有很多种方法可以算出你的基础代谢率和每…

Leetcode 43:字符串相乘(超详细的解法!!!)

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 示例 1: 输入: num1 "2", num2 "3" 输出: "6"示例 2: 输入: num1 "123", num2 "456&…

Rx、kotlin、retrofit三者结合封装的网络请求库

源代码&#xff1a;RxKotlinRetrofitDemo 1.定义统一的返回结果类 ResultData data class ResultData<T>(var code: Int, var message: String, var data: T?) code&#xff1a;接口返回数据状态码&#xff08;状态码与后台人员协商&#xff09;&#xff0c;0代表成功&a…

a标签传参接收_适合小订单量仓库的“标签拣货+标签二次分播”作业方式

“标签拣货标签二次分播作业”模式介绍物流中心启动拣货波次&#xff0c;每个波次包括多个客户订单&#xff0c;打印该波次的拣货标签&#xff0c;一件货品一个标签(包括客户订单号、拣货货位等信息)。拣货员一次拣一个波次的货品&#xff0c;根据标签将货品拣出来放在拣货车里…

Leetcode 50:Pow(x, n)(超详细的解法!!!)

实现 pow(x, n) &#xff0c;即计算 x 的 n 次幂函数。 示例 1: 输入: 2.00000, 10 输出: 1024.00000示例 2: 输入: 2.10000, 3 输出: 9.26100示例 3: 输入: 2.00000, -2 输出: 0.25000 解释: 2^{-2} 1/2^2 1/4 0.25说明: -100.0 < x < 100.0n 是 32 位有符号整数…

Leetcode 42:接雨水(超详细的解法!!!)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图&#xff0c;在这种情况下&#xff0c;可以接 6 个单位的雨水&#xff08;蓝色部分表示雨水&#x…