jar依赖项中的Gradle NoClassDefFoundError

jar依赖项中的Gradle NoClassDefFoundError,gradle,dependency-management,Gradle,Dependency Management,我开发了一个定制的Gradle插件,并组装成jar。此插件有一个依赖项: 插件/build.gradle dependencies { compile 'com.jcraft:jsch:0.1.53' } apply plugin: 'gg-release-plugin' buildscript { repositories { flatDir { dirs 'libs' } mavenCentral()

我开发了一个定制的Gradle插件,并组装成
jar
。此插件有一个依赖项:

插件/build.gradle

dependencies {
    compile 'com.jcraft:jsch:0.1.53'
}
apply plugin: 'gg-release-plugin'

buildscript {
    repositories {
        flatDir {
            dirs 'libs'
        }
        mavenCentral()
    }
    dependencies {
        classpath 'com.myplugin.plugin:myplugin:1.0'
    }
}
我已将我的插件包含在另一个消费者项目中(如
libs
中的
jar
):

消费者/构建.gradle

dependencies {
    compile 'com.jcraft:jsch:0.1.53'
}
apply plugin: 'gg-release-plugin'

buildscript {
    repositories {
        flatDir {
            dirs 'libs'
        }
        mavenCentral()
    }
    dependencies {
        classpath 'com.myplugin.plugin:myplugin:1.0'
    }
}
一切正常,但当执行使用依赖类
com.jcraft:jsch:0.1.53
的代码时,我得到一个错误:

java.lang.NoClassDefFoundError:com/jcraft/jsch/jsch


我做错了什么?如何将依赖项包含在
jar
文件中?

看来,您已经创建了一个具有编译时依赖性的插件jar库,它没有包含在最终jar的任何地方

您可以尝试使用或其他方法将插件jar创建为胖jar。在这种情况下,您将拥有一个包含所有依赖类的jar。但如果有人使用同一个库,这可能会导致问题

或者,您可以尝试将JSch库与插件jar一起提供,并创建一个消费者构建脚本依赖项,如:

buildscript {
    repositories {
        flatDir {
            dirs 'libs'
        }
        mavenCentral()
    }
    dependencies {
        classpath 'com.myplugin.plugin:myplugin:1.0'
        classpath 'com.jcraft:jsch:0.1.53'
    }
}

据我所知,如果您使用Maven repo发布插件,您可以提供一个pom.xml来描述所有插件的依赖关系,但正如我所见,您使用的是flatDir,因此,这似乎是不可能的。

谢谢。我已经在我的消费者中提供了这个库,它工作得很好。我想在公共repo中发布我的插件,但我不知道如何在pom.xml中描述插件的依赖关系。好吧,这将是在未来。谢谢