Ich habe zwei Projekte in IntelliJ IDEA 2016 bearbeitet, die Gradle Abhängigkeitsmanagement verwenden: Projekt A und Projekt B.Gradle Abhängigkeitsmanagement - Transitive Abhängigkeit Version Falsche
Projekt A definiert eine Kompilierung Umfang Abhängigkeit für Elasticsearch als:
compile 'org.elasticsearch:elasticsearch:2.3.1'
Projekt B deklariert eine Kompilierung Rahmen Abhängigkeit für Projekt A, wie so:
compile 'com.mycompany:elasticsearch-common:2.3.1'
ich würde erwarten, im Gradle Werkzeugfenster in Intelli J IDEA 2016 für Projekt B zu sehen:
...
com.mycompany:elasticsearch-common:2.3.1 (Compile)
org.elasticsearch:elasticsearch:2.3.1 (Compile)
...
Stattdessen sehe ich:
...
com.mycompany:elasticsearch-common:2.3.1 (Compile)
org.elasticsearch:elasticsearch:1.5.2 (Compile)
...
Keine andere Abhängigkeit in Projekt B hängt von Elasticsearch, so ist es nicht von einer anderen Abhängigkeitserklärung außer Kraft gesetzt werden.
Tatsächlich hat die pom.xml auf unserem Nexus für Projekt A folgt aus:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.1</version>
<scope>compile</scope>
</dependency>
Warum ist IntelliJ die transitive Version für Elasticsearch als 1.5.2 Berichterstattung zu sein?
Was ich versucht habe:
- Löschen .idea und .gradle innerhalb Projekt B Verzeichnis
- gradle Caches löschen
- Caches Invalidierung und Neustart in IntelliJ
- Fluchend
- Trinken Sie viel von Tee
- Freunde und Kollegen fragen
- Emailing Oprah
- zu IntelliJ Zurückkehren 15, wenn dies alles in Ordnung war (jetzt nicht mehr ist)
- auf die Toilette gehen (bezogen auf 5) und gehofft, dass es sich auf magische Weise fixiert, wenn ich zurück
erhalten Keine der oben genannten Arbeiten.
Was bedeutet Arbeit die elasticsearch:2.3.1
Abhängigkeit speziell in Projekt B angeben, aber das negiert nicht den gesamten Grund für transitive Abhängigkeiten?
Jede Hilfe wird geschätzt.
Update 1
Wie in den Kommentaren von LanceJava vorgeschlagen, lief ich gradle dependencies
, um zu sehen, was los war.Diese
zeigt, dass es speziell es Herabstufung:
org.elasticsearch:elasticsearch:2.3.1 -> 1.5.2
Als ich gradle dependencyInsight auf dieser Abhängigkeit lief es kam mit:
:dependencyInsight
com.mycompany:elasticsearch-common:2.3.1 (selected by rule)
\--- compile
org.elasticsearch:elasticsearch:1.5.2 (selected by rule)
org.elasticsearch:elasticsearch:2.3.1 -> 1.5.2
\--- com.mycompany:elasticsearch-common:2.3.1
\--- compile
Wer irgendwelche Ideen, warum dies geschieht?
Update 2
Dies scheint die Antwort zu haben: https://discuss.gradle.org/t/excluded-dependence-comes-back-when-spring-boot-plugin-is-applied/17945/2
Es scheint, dass die gradle Feder-Boot-Plugin mag ein wenig zu übernehmen und durchsetzen sie eigene Abhängigkeit Versionen ist (obwohl ich bin nicht Verwenden eines Spring-Boot-Starters, der Federdaten verwendet.
Ich reparierte diese durch Zugabe:
ext[elasticsearch.version] = '2.3.1'
meiner build.gradle Datei.
Versuchen Sie 'grdle Abhängigkeiten' von der Befehlszeile. Es sollte dir sagen, was vor sich geht. Vielleicht gibt es eine benutzerdefinierte [ResolutionStrategy] (https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html) –
@ LanceJava Danke!Ich tat dies und es sieht so aus, als würde es es speziell herunterstufen: org.elasticsearch: elasticesearch: 2.3.1 -> 1.5.2 Wenn ich dependencyInsight gemacht habe, kam es auf: org.elasticsearch: elasticsearch: 1.5.2 (ausgewählt per Regel) org.elastischeSuche: elasticsearch: 2.3.1 -> 1.5.2 \ --- com.meineUnternehmen: elasticsearch-common: 2.3.1 \ --- Laufzeit – ndtreviv
@LanceJava Siehe das Update. – ndtreviv