jar依赖项中的Gradle NoClassDefFoundError

时间:2015-10-15 08:52:13

标签: gradle dependency-management

我开发了一个自定义Gradle插件并组装为// Traits class template <typename T, typename = void> struct VectorTraits_impl { }; template <typename T> struct VectorTraits_impl<T, std::enable_if_t<std::is_integral<decltype(T::dimension)>::value>> { typedef T VectorType; typedef typename T::ValueType ValueType; static const std::uint16_t dimension = T::dimension; }; // Traits class template <typename T> using VectorTraits = VectorTraits_impl<T>; 。这个插件有一个依赖:

插件/的build.gradle

jar

我已将我的插件包含在另一个消费者项目中(dependencies { compile 'com.jcraft:jsch:0.1.53' } 中为jar):

消费者/的build.gradle

libs

一切正常,但是当执行使用依赖项apply plugin: 'gg-release-plugin' buildscript { repositories { flatDir { dirs 'libs' } mavenCentral() } dependencies { classpath 'com.myplugin.plugin:myplugin:1.0' } } 的代码时,我收到错误:

  

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

我做错了什么?如何在com.jcraft:jsch:0.1.53文件中包含依赖项?

1 个答案:

答案 0 :(得分:1)

似乎,你已经创建了一个带有编译时间依赖性的插件jar库,它不包含在你的最终jar中的任何地方。

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

或者您可以尝试与您的插件jar一起提供JSch库,并使消费者构建脚本依赖性如下:

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,因此,它似乎不是是可能的。