2015-11-04 51 views
5

我想拥有一个胖罐子但没有提供的依赖关系。所以我用下面的两个插件:Gradle影子插件包也提供了所有“提供”的依赖关系,这不应该是这种情况

,并有一个的build.gradle文件是这样的:

apply plugin: 'nebula.provided-base' 
apply plugin: 'com.github.johnrengelman.shadow' 

archivesBaseName = 'range-cache-drivers' 
group = 'com.engine' 
version = '0.302-SNAPSHOT' 

buildDir = 'target' 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 


dependencies { 
    provided project(':rangeCache') 

    // CSV, TSV, Fixe width 
    compile deps.univocityParsers 
    // MongoDB 
    compile deps.mongo 
    // Cassandra 
    compile deps.cassandradx 
    compile deps.cassandraSnappy 
    compile deps.cassandraLZ4 
} 

但是当我运行gradle shadowJar我仍然有所有rangeCache类都放在我的fat jar中。我如何从我的胖罐子中排除提供的依赖关系?

编辑1: 这似乎也不起作用,临时依赖关系仍然被复制到fat jar中。

shadowJar { 
    dependencies { 
     exclude(project(':rangeCache')) 
    } 
} 

编辑2:基于斯坦尼斯的答案我做了如下得到的东西正常工作:

configurations { 
    shadow 
    compile.extendsFrom provided 
    provided.extendsFrom shadow 
} 

dependencies { 
    provided project(':rangeCache') 

    // CSV, TSV, Fixe width 
    shadow deps.univocityParsers 

    // MongoDB 
    shadow deps.mongo 

    // Cassandra 
    shadow deps.cassandradx 
    shadow deps.cassandraSnappy 
    shadow deps.cassandraLZ4 

    testCompile deps.junit 
} 

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar 

task fatJar(type: ShadowJar) { 
    configurations = [project.configurations.shadow] 
    from(project.sourceSets.main.output) 
} 

回答

0

this article看看有关排除阴影罐子依赖。

不久,根据这篇文章,仅仅通过shadowJar的依赖关系排除一些依赖关系并不足以排除它的传递依赖性,就像您已经提到的一样。解决方法是修改运行时配置,从中排除一些依赖项,如:

configurations {  
    runtime.exclude %what you need to exclude% 
} 

希望它可以是有帮助的。

+1

这个不适用于项目。不过,我在链接的博客文章中找到了解决方案3,该文章运行良好 – KIC

相关问题