首页 文章

尝试申请其他项目时找不到独立的Kotlin Gradle插件

提问于
浏览
0

我正在尝试为Gradle创建一个自定义的独立Kotlin插件,并尝试将其应用于另一个项目,但在尝试将其应用于另一个项目时出现了 Plugin with id 'my.id.license-tools' not found 错误 .

这是插件项目的结构:

license-tools
+--src
   +--main
   |  +--java
   |  |
   |  +--kotlin
   |  |  +--my.id
   |  |     +--LicenseTools.kt
   |  |
   |  +--resources
   |     +--META-INF.gradle-plugins
   |        +--my.id.license-tools.properties
   +--test
   +--build.gradle

这是我的 build.gradle 文件:

buildscript {
    ext.kotlin_version = '1.2.21'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

group 'my.id'
version '0.1'

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'idea'
apply plugin: 'maven'


sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    compile gradleApi()
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

然后我们有插件类 LicenseTools.kt ,我来自那里:

package my.id

import org.gradle.api.Plugin
import org.gradle.api.Project

open class LicenseTools: Plugin<Project> {
    override fun apply(project: Project?) {
        println("License-Tools plugin has been applied")
    }
}

最后 my.id.license-tools.properties

implementation-class=my.id.LicenseToolsKt

我也试过了

implementation-class=my.id.LicenseTools

在使用 ./gradlew clean build 构建所有内容之后,我运行 ./gradlew install 将整个内容安装到本地Maven存储库,它已成功完成 .

然后我继续将以下内容添加到我的其他项目的buildscript块中:

repositories {
    mavenLocal()
    mavenCentral()
}
dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath "my.id:license-tools:0.1"
}

之后补充道

apply plugin: 'my.id.license-tools'

在尝试了许多不同的事情之后,例如更改到新的插件块或确保工件正确安装到本地maven存储库,我无法找到问题的根源,因为根据我读过的许多指南,这应该是制作独立插件的正确方法 .

1 回答

  • 0

    你可能现在想通了,但你的 my.id.license-tools.properties 应该被命名为 my.id.properties

    内容应该是 implementation-class=my.id.LicenseTools

    然后类路径应该命名为 classpath "my.id:license-tools:0.1" - > classpath "my.id:LicenseTools:0.1"

    apply plugin: 'my.id.license-tools' - > apply plugin: 'my.id.LicenseTools'

    所以它始终是:

    • 包: my.id

    • 名称: LicenseTools

    不过,我还没有真正测试过所有这些 .

相关问题