2015-01-14 109 views
2

依賴我有一個罐子,內置plugins.jar與gradle這個插件,是的build.gradle與此建:搖籃編譯不包括在罐

apply plugin 'java' 
    dependencies { 
    compile gradleApi() 
     compile localGroovy() 
     compile('eviware:maven-soapui-plugin:4.5.1') 
     compile('org.antlr:stringtemplate:4.0.2') 
     compile('commons-io:commons-io:2.4') 
     compile('joda-time:joda-time:2.1') 
    } 

這建立集結plugins.jar。而消耗的插件項目通過文件引用的插件jar

apply plugin 'thepluginwahoo' 
buildscript { 
dependencies { 
     classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:2.2.1' 
     classpath files('/path/to/build-plugins.jar') 
    } 
} 

問題是,當我運行第二個項目的任何任務,我得到「級代理無法上課XYZ創建」與根源因爲四個依賴項(joda-time,commons-io,stringtemplate,maven-soapui-plugin)不在那裏。如果我添加的依賴關係插件消費項目,然後它工作得很好:

apply plugin 'thepluginwahoo' 
buildscript { 
    dependencies { 
     classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:2.2.1' 
     classpath files('/path/to/build-plugins.jar') 
     classpath 'eviware:maven-soapui-plugin:4.5.1' 
     classpath 'org.antlr:stringtemplate:4.0.2' 
     classpath 'joda-time:joda-time:2.1' 
     classpath 'commons-io:commons-io:2.4' 
    } 

}

我的問題是,爲什麼沒有在插件項目中的「編譯」依賴的類出現在當jar被包含在消耗插件的項目的buildscript的類路徑中時,該消耗插件的項目。

回答

3

Jars通常不包含它們的依賴關係。相反,它們會與某種描述工件依賴關係的元數據描述符(pom.xml或ivy.xml)一起發佈到存儲庫中。當你直接將jar文件作爲依賴項引用時,Gradle無法知道它的傳遞依賴關係是什麼。你有一對夫婦的方式來處理這個:

  1. 發佈您的插件jar到存儲庫,必要的元數據(其中搖籃會爲你做)一起,並把它作爲一個external module dependency
  2. 顯式聲明插件的傳遞依賴使用client module dependency
  3. 使用類似Gradle fatjarshadow的插件來將jar包中的依賴關係進行捆綁。