Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 不使用maven应用本地jar插件_Kotlin_Gradle_Gradle Kotlin Dsl_Kotlin Gradle Plugin - Fatal编程技术网

Kotlin 不使用maven应用本地jar插件

Kotlin 不使用maven应用本地jar插件,kotlin,gradle,gradle-kotlin-dsl,kotlin-gradle-plugin,Kotlin,Gradle,Gradle Kotlin Dsl,Kotlin Gradle Plugin,我想从本地jar加载我的自定义插件。jar文件编译得很好,当我检查它时,清单和插件类就在那里 gradlePlugin { plugins { create("asdf") { // <-- I really call it "asdf" in the kts script id = "asdf" implementationClass = "plu

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

gradlePlugin {
    plugins {
        create("asdf") { // <-- I really call it "asdf" in the kts script
            id = "asdf"
            implementationClass = "pluginTest.TestPlugin"
            version = "1.4.0"
        }
    }
}
但它一直告诉我:

在以下任何源中未找到插件[id:'asdf',版本:'1.4.0']:


我错过了什么?我使用GradleV6.5。

当您在类路径上有插件jar时,插件应用程序中不能有版本号。我想这是因为在类路径上不能有多个版本不同的JAR,所以在这里指定一个版本没有任何意义(除了验证您使用的是正确的版本)。这不会解决问题,但这是一个开始

老实说,我不知道为什么你的方法仍然不起作用。buildscript块应该为特定脚本设置依赖项,这应该使插件对它可见。因为某种原因,它没有

也许这是一个bug,或者这只是对插件{}块使用的一个未记录的限制。也许你可以去问一下,或者为它创建一个网站。然而,有一些变通方法不涉及发布到(本地)Maven存储库,我同意这可能有点烦人

如果您使用“apply from”而不是“plugins{}”,它可以工作。出于某种原因,前者可以看到buildscript类路径,而后者不能:

//build.gradle(Groovy DSL)
构建脚本{
依赖关系{
类路径(文件(“…\\\\path\\to\\pluginest.jar”))
}
}
申请来源:“asdf”
或者,将buildscript插件从build.gradle文件移动到settings.gradle文件。这将使整个构建类路径可用,并使其与插件块一起工作:

//settings.gradle(Groovy DSL):
构建脚本{
依赖关系{
类路径(文件(“…\\\\path\\to\\pluginest.jar”))
}
}
//build.gradle(Groovy DSL)
插件{
id(“asdf”)
}
最后,万一你还没有考虑过,你可以添加插件作为一个插件。这将为插件创建一个源依赖项,并且有一个优势,即可传递的依赖项将被继承(您放在插件自己的依赖项块中的那些依赖项),如果不是最新的,它将自动构建。我使用这种方法集成测试我的插件,有时还将它们应用到我的其他实际项目中,以便在发布新版本之前在更大的环境中测试它们

使用以下任一方法执行此操作:

//settings.gradle(Groovy DSL):
includebild(“…\\\\path\\to\\plugin”)
//build.gradle(Groovy DSL):
插件{
id(“asdf”)
}
或者无需在构建中硬编码(因此您可以在本地版本和发布版本之间动态切换):

//build.gradle(Groovy DSL):
插件{
id(“asdf”)版本“1.4.0”//version是可选的(当下面的命令行切换时将被忽略)
}
//运行时使用:
./gradlew--包括构建“..\\..\\path\\to\\plugin”构建
有了答案,我就明白了

您需要将
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")
    }
}

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


可能是存储库部分需要一个
flatDir
“存储库”?我不习惯处理本地文件,但我想这可能与另一个选项类似,可能是带有版本化插件的
plugins{}
块不适用于这样的普通文件。相反,您可以只
apply()
而不是整个
plugins
块?他们在本教程开始时是这样做的:@Joffrey我尝试了两种建议。不幸的是,格雷德尔没有买。我想我还是得在本地安装一个maven:-(呃,这太令人沮丧了。@Joffrey你可能想看看我的答案;-]可以使用jar文件。非常有用,感谢你展示了这么多想法!我终于可以使用
apply(plugin=“asdf”)
(Kotlin DSL)。默认情况下,使用
from
它不起作用。我移动了
构建脚本,但没有成功,所以我将其放回
build.gradle.kts
中,并开始尝试
应用
。然后我跳转到源代码,看到它有多个参数,我试了一下,砰的一声!)我很好奇这两种方法之间的区别,这个答案很好地解释了这一点:Gradle还没有将功能移动到新的api。不可信,请看我的答案,我找到了一种方法:-)
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath(files("..\\..\\path\\to\\pluginTest.jar"))
    }
}

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

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