2015-11-04 14 views
5

Tôi muốn có một bình chất béo nhưng không có phụ thuộc được cung cấp. Vì vậy, tôi sử dụng hai plugin sau đây:Gói plugin bóng tối cũng tất cả các phụ thuộc "được cung cấp" không phải là trường hợp

và có một tập tin build.gradle như thế này:

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 
} 

Nhưng khi tôi chạy gradle shadowJar tôi vẫn còn có tất cả các lớp rangeCache trong lọ chất béo của tôi. Làm thế nào tôi có thể loại trừ các phụ thuộc được cung cấp từ bình chất béo của tôi?

EDIT 1: Điều này có vẻ cũng không hoạt động, các phụ thuộc tạm thời vẫn được sao chép vào bình chất béo.

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

EDIT 2: Dựa trên câu trả lời của Stanislav tôi đã làm như sau để có được những thứ hoạt động bình thường:

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

Trả lời

0

Hãy xem this article về loại trừ phụ thuộc bóng jar.

Một thời gian ngắn, theo bài viết này, chỉ loại trừ một số phụ thuộc thông qua phụ thuộc của shadowJar là không đủ để loại trừ phụ thuộc transitive của nó, giống như bạn đã đề cập rồi. Giải pháp cách thực hiện, là sửa đổi cấu hình thời gian chạy, để loại trừ nó khỏi một số phụ thuộc, như:

Hy vọng, nó có thể hữu ích.

+1

Dows này không hoạt động với các dự án. Tuy nhiên tôi đã đi cho giải pháp số 3 trong bài đăng blog được liên kết đang hoạt động khá tốt – KIC

Các vấn đề liên quan