2017-05-15 2 views
1

Ich arbeite mit Gradle 3.4.1.Warum sind die Kompilierungsabhängigkeiten meiner Bibliothek durchlässig?

Ich habe eine Bibliothek (nennen wir es utils) mit dem Gradle Java-Bibliothek-Plugin gebaut, die in einer netten JAR-Datei resultiert. Dies ist der Abschnitt Abhängigkeiten:

dependencies { 
// public API 
api group: "org.postgresql", name: "postgresql", version: "9.2-1004-jdbc4"  
api group: "log4j", name: "log4j", version: "1.2.17" 

// implementation specific 
implementation group: "commons-configuration", name: "commons-configuration" , version: "1.10" 
implementation group: "commons-lang", name: "commons-lang" , version: "2.6" 
} 

Jetzt ist mein Projekt diese Bibliothek enthält sowie einige andere Apache Commons Bibliotheken:

dependencies { 
compile group: "com.foo", name: "utils", version: "6.+", changing: true 
compile group: "org.apache.commons", name: "commons-lang3", version: "3.5" 
compile group: "commons-io", name: "commons-io" , version: "2.5" 
} 

In meinem Classpath für das Projekt Ich habe jetzt die commons-lang Bibliothek sowie die commons-lang3 Bibliothek, obwohl ich die entsprechenden Abhängigkeiten als implementation angegeben! Laut der Dokumentation https://docs.gradle.org/3.4.1/userguide/java_library_plugin.html sollte dies der richtige Weg sein.

Hier ist die Abhängigkeiten Auflistung meines Projekts:

default - Configuration for default artifacts. 
+--- com.foo:utils:6.+ -> 6.0.0 
| +--- org.postgresql:postgresql:9.2-1004-jdbc4 
| +--- log4j:log4j:1.2.17 
| +--- commons-configuration:commons-configuration:1.10 
| | +--- commons-lang:commons-lang:2.6 
| | \--- commons-logging:commons-logging:1.1.1 
| \--- commons-lang:commons-lang:2.6 
+--- org.apache.commons:commons-lang3:3.5 
\--- commons-io:commons-io:2.5 

Was mache ich falsch? Wie kann ich die externen Abhängigkeiten commons-lang und commons-configuration loswerden?

+0

Hinweis, dass die Umsetzung Abhängigkeiten werden immer noch als Runtime-Abhängigkeiten beenden - sie auf dem Classpath zur Laufzeit erforderlich sind. –

Antwort

0

Es gibt mehrere Möglichkeiten, transitive Abhängigkeiten auszuschließen, die in mehreren Fragen und in der ausführlichen Dokumentation behandelt werden.

configurations { 
    compile.transitive = false 
} 

oder

configurations.all { 
    exclude group:"ch.qos.logback", module:"logback-core" 
} 

oder

dependencies { 
    compile ('foo:bar:0.1') { 
     exclude group: "org.slf4j", module: "slf4j-log4j12" 
    } 
} 
Verwandte Themen