2016-04-27 15 views
3

Wir haben eine Maven Projektstruktur wie dieses:mvn Abhängigkeit: Purge-local-Repository nicht in Multi-Modul-Projekt

Parent 
L A 
L B 

A hängt von B

Beide haben verschiedene Abhängigkeiten von anderen Libs

Das Erstellen dieses mit mvn clean install funktioniert gut, aber wenn wir versuchen, alle Abhängigkeiten wie beschrieben here mit

zu beschneiden
mvn dependency:purge-local-repository 

Wir erhalten eine Fehlermeldung, dass es nicht um die Abhängigkeit zu B:jar:snapshot-version lösen können:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.10:purge-local-repository (default-cli) on project A: Failed to refresh project dependencies for: A:jar:4.0.1-SNAPSHOT: required artifacts missing: 
[ERROR] B:jar:6.0-5 

Meine aktuelle Interpretation ist, dass während eines tatsächlichen Build B zuerst bekommt bauen und gelöst bekommen können, aber während der Spülung es wird nichts gebaut, so dass die Auflösung fehlschlägt. Aber das Projekt ist da und seine Abhängigkeiten sollten gelöscht werden. Wie kann ich das beheben?

-DactTransitively=false 

scheint nichts zu ändern.

+0

Warum würden Sie lokalen Cache löschen möchten? Welche Art von Problem versuchen Sie zu lösen? – khmarbaise

+0

@khmarbaise Ich muss den lokalen Repository-Cache bereinigen, da sich der Inhalt von Artefakten geändert hat, ohne dass die Version geändert wurde. Mir ist bewusst, dass das auf allen Ebenen falsch ist, aber ich kann es nicht ändern (zumindest jetzt). Außerdem habe ich keinen Zugriff auf das Dateisystem, welches sich auf einem CI-Server befindet. –

+0

Der Job im CI-Server sollte den lokalen Cache haben und nicht den ganzen CI-Server, weil er automatisch alle Jobs von diesem Cache abhängig macht ... I würde vorschlagen, einen separaten Job zu machen, der diese Dinge löscht, macht keinen Maven-Aufruf dafür ... Insbesondere, wenn Sie die Unveränderlichkeit von Release-Versionsartefakten verletzen, die genau solche Probleme und Probleme ergeben ... – khmarbaise

Antwort

2

Dies sieht aus wie ein Fehler mit der maven-dependency-plugin (JIRA Problem MDEP-405) durch eine Regression in Maven 3.0.4 eingeführt.

Von Paul Gier's comment:

Ich denke, der Grund, warum dies passiert ist, weil, um den vollen Satz von transitiven Abhängigkeiten zu bestimmen, zu löschen, wird die Poms verfügbar sein müssen. Wenn die Poms im vorherigen Modul bereits aufgelöst wurden, wird Maven sie nicht erneut auflösen und schlägt einfach fehl. Die Abhängigkeit hat also kein Problem damit, dass die Datei bereits aus dem lokalen Repo gelöscht wird, aber der Maven-Abhängigkeitsauflösungscode schlägt fehl, wenn versucht wird, dieselbe Datei zweimal in demselben Build aufzulösen.

Sie könnten den Build mit Maven 3.0.3 versuchen, weil es eine Änderung in Maven 3.0.4 in dieser war: http://mail-archives.apache.org/mod_mbox/maven-dev/201210.mbox/%3C5752023.Vp0WJBo1vZ%40bigmax%3E

Dies ist auf die Regressions verknüpft ist MNG-5366, dass derzeit ungelöst ist.

Ich sehe keine echte Problemumgehung abgesehen von Downgrade Maven.

+0

Während dies verwandt sein könnte Es schien nicht das Problem zu sein. Siehe meine eigene Antwort. Habe +1 für den Zeiger. –

4

Während es scheint nicht das genaue Problem zu sein referenced by @Tunaki das Beispiel dort lassen Sie mich versuchen:

mvn dependency:purge-local-repository -DreResolve=false 

Welche Ausnahme losgeworden aber nicht, um tatsächlich die Abhängigkeit nachladen ich Probleme hatte. An welchem ​​Punkt stieß ich auf this answer, die versuchen, mich

gemacht
mvn dependency:purge-local-repository -DreResolve=false -DactTransitively=false 

, die das Problem gelöst, obwohl sie das Gegenteil anfordernden von dem, was scheint wollte ich erreichen: -/

+0

Interessant. Das sieht in der Tat sehr seltsam aus ...! – Tunaki

+0

Nun, das Projekt hat einige "kreative" Ansätze. Möglicherweise gibt es etwas Seltsames, das ich gerade vermisst habe. –