2015-11-04 6 views
5

Desidero avere un contenitore di grassi ma senza le dipendenze fornite. Così ho utilizzare i seguenti due plugin:Pacchetti di plugin per ombreggiatura sfumata anche tutte le dipendenze "fornite" che non dovrebbero essere il caso

e avere un file build.gradle come questo:

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 
} 

Ma quando corro gradle shadowJar ho ancora tutte le classi rangeCache nel mio barattolo di grasso. Come posso escludere le dipendenze fornite dal mio barattolo di grasso?

EDIT 1: Anche questo sembra non funzionare, le dipendenze dei transitori vengono ancora copiate nel contenitore di grasso.

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

EDIT 2: Sulla base di risposta di Stanislav ho fatto quanto segue per ottenere le cose funzionano correttamente:

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) 
} 

risposta

0

Date un'occhiata a this article sull'esclusione di dipendenze vaso ombra.

In breve, secondo questo articolo, l'esclusione di alcune dipendenze tramite le dipendenze di shadowJar non è sufficiente per escludere le sue dipendenze transitive, proprio come già menzionato. La soluzione come farlo, è quello di modificare la configurazione di runtime, di escludere da essa qualche dipendenza, come:

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

Speranza, potrebbe essere utile.

+1

Questo file non funziona con i progetti. Comunque sono andato per la soluzione numero 3 nel post del blog collegato che sta funzionando abbastanza bene – KIC

Problemi correlati