jar依赖项中的Gradle NoClassDefFoundError
我开发了一个定制的Gradle插件,并组装成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()
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中描述插件的依赖关系。好吧,这将是在未来。谢谢