Java 带有依赖项的Gradle自定义插件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:

我正在尝试为其他gradle项目使用的自定义gradle插件构建一个jar。我正在使用java编写插件。我在jar中包含依赖项时遇到问题。如果我使用下面的
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