2015-10-15 230 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中描述插件的依賴關係。那麼,這將是未來。謝謝。 –

相關問題