2016-05-03 17 views
0

Hauptprojekt A (APK) hängt vom Teilprojekt B (AAR) ab. Sowohl A als auch B hängen von C (AAR) ab. Das Problem ist, C zweimal enthalten, die dazu führen:Buck: transitive Abhängigkeiten

"values.xml:XXX: error: Attribute "YYY" has already been defined"

Wie würde ich transiente Abhängigkeit C von endgültigen APK ausschließen?

Projekt A:

android_binary (
    deps = [  
    ':src', 
    ], ... 
) 

android_library(
    name = 'src', 
    deps = [ 
    ':C', 
    '//B:src',  
    '//B:res', 
    ], ... 
} 

android_resource(
    name = 'res', 
    res = 'src/main/res', ... 
} 

Teilprojekt B

android_aar (
    deps = [ 
    ':src', 
    ':res' 
    ], ... 
) 

android_library(
    name = 'src', 
    deps = [ 
    ':res', 
    ':C' 
    ], ... 
) 

android_resource(
    name = 'res', 
    deps = [ 
    ':C' 
    ], ... 
) 

C ist "AppCompat-v7.aar".
Hinweis: A enthält C in "A/libs" und B enthält C in "B/libs".

Antwort

0

Ich löste die Abhängigkeit C von Hauptprojekt A, während ich an Teilprojekt B arbeite. Auf diese Weise erhält A C durch Teilprojekt B als transitive Abhängigkeit und verhindert, dass C zweimal enthalten ist.

0

Es ist schwer aus dem von Ihnen bereitgestellten Sample zu unterscheiden, aber es klingt, als ob Sie 'C' zweimal definiert haben: einmal in A/libs und einmal in B/libs. Aus diesem Grund versteht Buck nicht, dass es "das Gleiche" ist. Was Sie tun sollten, ist "C" an einen Ort zu setzen, an dem sowohl A als auch B darauf verweisen können (ein "Drittanbieter" Ordner, der ein Peer zu "A" und "B" ist, ist ziemlich üblich), so wird Buck es tun in der Lage zu sehen, dass ein Abhängigkeitsdiamant in der Grafik vorhanden ist, und dieses korrekt auflösen.