Java 带有依赖项的Gradle自定义插件jar
我正在尝试为其他gradle项目使用的自定义gradle插件构建一个jar。我正在使用java编写插件。我在jar中包含依赖项时遇到问题。如果我使用下面的Java 带有依赖项的Gradle自定义插件jar,java,gradle,build.gradle,gradle-plugin,Java,Gradle,Build.gradle,Gradle Plugin,我正在尝试为其他gradle项目使用的自定义gradle插件构建一个jar。我正在使用java编写插件。我在jar中包含依赖项时遇到问题。如果我使用下面的build.gradle plugins { id 'groovy' } repositories{ mavenCentral() } dependencies { compile gradleApi() compile localGroovy() compile 'com.google.guava:
build.gradle
plugins {
id 'groovy'
}
repositories{
mavenCentral()
}
dependencies {
compile gradleApi()
compile localGroovy()
compile 'com.google.guava:guava:27.0-jre'
testCompile 'junit:junit:4.12'
//compile 'org.apache.commons:commons-lang3:3.8.1'
}
group = 'com.mine'
version = '1.0'
jar {
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it)}
}
}
在项目中应用插件时,我得到了一个针对guava类的NoClassDefFound异常。如果我在build.gradle
plugins {
id 'groovy'
}
repositories{
mavenCentral()
}
dependencies {
compile gradleApi()
compile localGroovy()
compile 'com.google.guava:guava:27.0-jre'
testCompile 'junit:junit:4.12'
//compile 'org.apache.commons:commons-lang3:3.8.1'
}
group = 'com.mine'
version = '1.0'
jar {
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it)}
}
}
它表示未找到Id为“my Plugin”的插件。如何在gradle插件jar中包含依赖项?您的插件项目应配置为独立的插件项目,然后发布到maven存储库,这将使依赖项解析工作正常;关于编写自定义插件,有很好的文档,特别是以下部分: 在这里的Gradle示例中还有一个编写/发布/使用自定义插件的好例子:(请参见两个子项目
发布
和使用
)
下面是一个插件的工作示例,该插件依赖于外部库(例如commons lang):
插件项目
格雷德尔先生
插件实现:src/main/groovy/org/gradle/sample/Plugin/MyPLugin.groovy
package org.gradle.sample.plugin
import org.apache.commons.lang3.StringUtils
import org.gradle.api.Plugin
import org.gradle.api.Project
class MyPlugin implements Plugin<Project> {
@Override
void apply(final Project project) {
println "Applying custom plugin... "
project.tasks.create('testPlugin'){
doLast{
println " custom plugin task executing."
println "Result: " + StringUtils.capitalize("stringtotest")
}
}
}
}
要测试插件,请尝试执行插件任务testPlugin
> Task :testPlugin
custom plugin task executing.
Result: Stringtotest
很抱歉添加这个作为答案,但我没有足够的分数来评论(是的,这是有点晚了,但我在搜索中发现了这一点,它来得很近,也许这将帮助其他人) @M.Ricciuti的答案是正确的,只是缺少一个文件,即引用项目(而不是插件)目录中的settings.gradle:
pluginManagement {
repositories {
maven {
url '../repos/maven-repo'
}
gradlePluginPortal()
ivy {
url '../repos/ivy-repo'
}
}
}
非常感谢,在找到这一点之前,我已经尝试了很多不起作用的东西,甚至gradle的例子也不起作用(或者更可能的是,我没有正确地运行它们)。无论如何,我把我在答案中看到的东西与M.Ricciuti的答案合并在一起,并在样本中看到了该文件
我的完整项目在
自述文件中有运行它的说明。(注意,我没有包含包装器,但我使用的是gradle版本5.3.1。)不要构建jar,而是手动使用jar。只需将插件发布到Maven存储库。那么依赖项应该在使用时自动解析。嗨,我很好奇你是否也可以提供带有本地依赖项的gradle插件示例,例如带有我的本地模块依赖项的示例(我已经编写了,换句话说不是外部依赖项)。我正在努力将它发布到MavenLocal;在我的另一个项目中使用该插件后,我将得到一个错误,即没有找到本地模块的工件。澄清一下,我遇到了与这里相同的问题-。如果依赖项是本地子项目,这似乎不起作用。我发现错误
找不到io.github.sof3:core:1.0-SNAPSHOT.
,其中我的插件是io.github.sof3:plugin:1.0-SNAPSHOT
。