我正在尝试为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 回答
你可能现在想通了,但你的
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
不过,我还没有真正测试过所有这些 .