kotlin - 不使用maven应用本地jar-plugin

标签 kotlin gradle gradle-kotlin-dsl kotlin-gradle-plugin

我想从本地 jar 加载我的自定义插件。 jar 文件编译得很好,当我检查它时, list 和插件类都在那里。

gradlePlugin {
    plugins {
        create("asdf") { // <-- I really call it "asdf" in the kts script
            id = "asdf"
            implementationClass = "pluginTest.TestPlugin"
            version = "1.4.0"
        }
    }
}

该插件还没有做任何有用的事情,因为它应该是一个概念验证,以确保它确实有效:

class TestPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        println("Hallo TestPlugin!")
    }
}

然后我尝试在另一个项目中像这样使用它:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath(files("..\\..\\path\\to\\pluginTest.jar"))
    }
}

plugins {
    id("asdf") version "1.4.0"
}

但它一直告诉我:

Plugin [id: 'asdf', version: '1.4.0'] was not found in any of the following sources:

我在这里缺少什么?我使用 Gradle v6.5。

最佳答案

@BjørnVester's答案我想出来了!

您需要将 buildscript 放入 settings.gradle.kts 中,因为它不会在 build.gradle.kts 中执行即使放在插件之前。

buildscript {
    repositories {
        flatDir {
            dirs("..\\reusable-kotlin\\build\\libs") // <-- folder with jars
        }
    }
    dependencies {        
        classpath("com.hedev.kotlin:reusable-kotlin:1.4.0")
    }
}

但是有一个问题!您必须在 classpath 的名称标识符中使用 jar 的文件名,如下所示:

group:file-name:version

gradle 将查找的文件是 file-name-version.jarfile-name.jar 如果您执行以下操作,您将在错误消息中看到它一个错误(我故意添加了 _ 来触发错误):

Could not resolve all artifacts for configuration 'classpath'.
Could not find com.hedev.kotlin:reusable-kotlin_:1.4.0. Searched in the following locations:
- file:/C:/some/path/reusable-kotlin/build/libs/reusable-kotlin_-1.4.0.jar
- file:/C:/some/path/reusable-kotlin/build/libs/reusable-kotlin_.jar

为了使其正常工作,我还必须将 group 属性添加到插件本身:

gradlePlugin {
    plugins {
        create("asdf") {
            id = "asdf"
            implementationClass = "com.hedev.kotlin.gradle.TestPlugin"
            version = "1.4.0"
            group = "com.hedev.kotlin"
        }
    }
}

最后,您可以在 build.gradle.kts应用它(此处没有版本):

plugins {
    id("asdf")
}

关于kotlin - 不使用maven应用本地jar-plugin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65665333/

相关文章:

android - Kotlin 中的 C# nameof(Class) 等效项

kotlin - 在 Gradle 中合并多个提供程序。 Provider.map 与 project.provider 之间的区别

Android 中的 android.os.TransactionTooLargeException 错误

android - “ignoreKotlinNullability”实际做什么?

gradle - 自定义Gradle任务取决于插件

gradle - 如何通过Kotlin DSL将系统属性传递给Gradle测试

gradle - 使用Kotlin DSL在Gradle构建脚本中配置swagger

ios - Kotlin 多平台项目无法从 XCFramework 找到模块

java.util.zip.ZipException : duplicate entry: com/google/android/gms/internal/zzak. 类

gradle - Kotlin DSL 中的 gradle 额外属性是如何设置的?