在不使用 maven 的情况下应用本地 jar-plugin
Apply local jar-plugin without using maven
我想从本地 jar
加载我的自定义插件。 jar
文件编译正常,当我检查它时,清单和插件 class 在那里。
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.
当类路径中有插件 jar 时,插件应用程序中不能有版本号。我想这是因为首先你不能在类路径上有多个不同版本的 jar,所以在这里指定一个版本没有任何意义(除了可能验证你使用的是正确的版本)。这不会解决问题,但这是一个开始。
老实说,我不知道为什么你的方法仍然行不通。 buildscript 块应该为该特定脚本设置依赖项,并且应该使插件对其可见。出于某种原因,它不是。
也许这是一个错误,或者这只是对插件 {} 块的使用的未记录限制。或许您可以在 Gradle forums or create an issue 询问。但是,有一些解决方法不涉及发布到(本地)Maven 存储库,我同意这可能有点烦人。
如果您使用“apply from”而不是“plugins {}”,它会起作用。出于某种原因,前者可以看到构建脚本类路径,而后者不能:
// build.gradle (Groovy DSL)
buildscript {
dependencies {
classpath(files("..\..\path\to\pluginTest.jar"))
}
}
apply from: "asdf"
或者,将 buildscript 插件从 build.gradle 文件移动到 settings.gradle 文件。这使得整个构建类路径可用,并将使其与插件块一起工作:
// settings.gradle (Groovy DSL):
buildscript {
dependencies {
classpath(files("..\..\path\to\pluginTest.jar"))
}
}
// build.gradle (Groovy DSL)
plugins {
id("asdf")
}
最后,以防万一您还没有考虑过它,您可以将插件添加为 composite build。这将创建对插件的源依赖关系,并具有传递依赖关系(您放入插件自己的依赖关系块中的依赖关系)的优点,并且如果不是最新的,它将自动构建。我使用这种方法来集成测试我的插件,有时也会将它们应用到我的其他实际项目中,以便在发布新版本之前在更大的环境中测试它们。
使用以下任一方法:
// settings.gradle (Groovy DSL):
includeBuild("..\..\path\to\plugin")
// build.gradle (Groovy DSL):
plugins {
id("asdf")
}
或者不在构建中对其进行硬编码(这样您就可以在本地版本和发布版本之间动态切换):
// build.gradle (Groovy DSL):
plugins {
id("asdf") version "1.4.0" // Version is optional (will be ignored when the command line switch below)
}
// Run with:
./gradlew --include-build "..\..\path\to\plugin" build
通过 的回答我明白了!
您需要将 buildscript
放在 settings.gradle.kts
中,因为即使放在 plugins
.
之前它也不会在 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.jar
或 file-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")
}
我想从本地 jar
加载我的自定义插件。 jar
文件编译正常,当我检查它时,清单和插件 class 在那里。
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.
当类路径中有插件 jar 时,插件应用程序中不能有版本号。我想这是因为首先你不能在类路径上有多个不同版本的 jar,所以在这里指定一个版本没有任何意义(除了可能验证你使用的是正确的版本)。这不会解决问题,但这是一个开始。
老实说,我不知道为什么你的方法仍然行不通。 buildscript 块应该为该特定脚本设置依赖项,并且应该使插件对其可见。出于某种原因,它不是。
也许这是一个错误,或者这只是对插件 {} 块的使用的未记录限制。或许您可以在 Gradle forums or create an issue 询问。但是,有一些解决方法不涉及发布到(本地)Maven 存储库,我同意这可能有点烦人。
如果您使用“apply from”而不是“plugins {}”,它会起作用。出于某种原因,前者可以看到构建脚本类路径,而后者不能:
// build.gradle (Groovy DSL)
buildscript {
dependencies {
classpath(files("..\..\path\to\pluginTest.jar"))
}
}
apply from: "asdf"
或者,将 buildscript 插件从 build.gradle 文件移动到 settings.gradle 文件。这使得整个构建类路径可用,并将使其与插件块一起工作:
// settings.gradle (Groovy DSL):
buildscript {
dependencies {
classpath(files("..\..\path\to\pluginTest.jar"))
}
}
// build.gradle (Groovy DSL)
plugins {
id("asdf")
}
最后,以防万一您还没有考虑过它,您可以将插件添加为 composite build。这将创建对插件的源依赖关系,并具有传递依赖关系(您放入插件自己的依赖关系块中的依赖关系)的优点,并且如果不是最新的,它将自动构建。我使用这种方法来集成测试我的插件,有时也会将它们应用到我的其他实际项目中,以便在发布新版本之前在更大的环境中测试它们。
使用以下任一方法:
// settings.gradle (Groovy DSL):
includeBuild("..\..\path\to\plugin")
// build.gradle (Groovy DSL):
plugins {
id("asdf")
}
或者不在构建中对其进行硬编码(这样您就可以在本地版本和发布版本之间动态切换):
// build.gradle (Groovy DSL):
plugins {
id("asdf") version "1.4.0" // Version is optional (will be ignored when the command line switch below)
}
// Run with:
./gradlew --include-build "..\..\path\to\plugin" build
通过
您需要将 buildscript
放在 settings.gradle.kts
中,因为即使放在 plugins
.
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.jar
或 file-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")
}