2015-10-15 229 views
1

我开发了一个定制的Gradle插件并组装为jar。这个插件有一个依赖:jar依赖中的Gradle NoClassDefFoundError

插件/的build.gradle

dependencies { 
    compile 'com.jcraft:jsch:0.1.53' 
} 

我已经包括了我的另一个消费项目插件(如libsjar):

消费/的build.gradle

apply plugin: 'gg-release-plugin' 

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

Ever ything工作正常,但执行的使用依赖com.jcraft:jsch:0.1.53类的代码时,我得到一个错误:

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

我在做什么错?我如何在jar文件中包含依赖关系?

回答

1

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

你可以尝试使用Gradle FatJar plugin或其他的东西来创建你的插件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,因此,似乎不可能。

+0

谢谢。我已经在我的消费者中提供了该库,并且它工作正常。我想在公开回购中发布我的插件,但我不知道如何在pom.xml中描述插件的依赖关系。那么,这将是未来。谢谢。 –

相关问题