我开发了一个自定义 Gradle 插件并组装为 jar
。这个插件有一个依赖:
plugin/build.gradle
dependencies {
compile 'com.jcraft:jsch:0.1.53'
}
我已将我的插件包含在另一个消费者项目中(作为 libs
中的 jar
):
consumer/build.gradle
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 中的任何地方。
您可以尝试使用 Gradle FatJar plugin 将插件 jar 创建为 fat 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 存储库来发布您的插件,您可以提供一个 pom.xml 来描述插件的所有依赖项,但正如我所见,您正在为它使用 flatDir,所以,它似乎不是成为可能。
关于jar 依赖项中的 Gradle NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33143977/