Ich habe ein Multi-Modul-Projekt, in dem eine der beiden Submodule von der anderen abhängig ist. This question bedeutet, dass mvn install
sich um diese Abhängigkeiten kümmern soll.Multi-Modul Maven-Abhängigkeit mit Repository, nicht lokal auf Travis CI
Alles funktioniert auf lokaler Ebene auf meinem Rechner (sowohl in Eclipse als auch in der Befehlszeile). Wenn ich jedoch das Modul aktualisiere, das den Code ändert, den das zweite Modul benötigt, und mich in mein github-Repository festlege, schlägt das zweite Modul den Travis-CI-Build fehl. Ich habe das Problem auf die Tatsache zurückgeführt, dass es seine Abhängigkeit von einem Repository herunterlädt, anstatt das gerade kompilierte zu verwenden.
Das Problem ist sehr ähnlich zu the one reported in this question, mit der Ausnahme, dass ich anstelle von meinem lokalen Repository mit dem Travis CI automatisierten Build beschäftigen. Die Kommentare und Antwort auf diese Frage zeigen, dass:
The dependency has a snapshot version. For snapshots, Maven will check the local repository and if the artifact found in the local repository is too old, it will attempt to find an updated one in the remote repositories.
jedoch in diesem Fall „zu alt“ nicht gelten. Das lokale Artefakt wurde buchstäblich gebaut. Es sollte Sekunden alt sein.
Hier sind die entsprechenden Abschnitte pom.xml des oshi-json
Modul, auf oshi-core
die Abhängigkeit der Feststellung (beide ihre Versionsnummer mit dem Elternteil):
<parent>
<groupId>com.github.dblock</groupId>
<artifactId>oshi-parent</artifactId>
<version>3.0-SNAPSHOT</version>
</parent>
<artifactId>oshi-json</artifactId>
<packaging>jar</packaging>
<name>oshi-json</name>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>oshi-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
und einen Auszug aus dem Eltern pom.xml :
<groupId>com.github.dblock</groupId>
<artifactId>oshi-parent</artifactId>
<version>3.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>oshi-parent</name>
<modules>
<module>oshi-core</module>
<module>oshi-json</module>
</modules>
Die vollständigen Dateien sind hier:
Relevante Auszüge aus den Protokolldateien finden Sie weiter unten. Ein vollständiges Beispiel für eine failed Travis CI build can be found here. Beachten Sie, dass das Symptom (Kompilierungsfehler) darauf zurückzuführen ist, dass Travis den neuesten Snapshot für oshi-core verwendet, der die in oshi-json referenzierte Klasse nicht enthält. Die Klasse befindet sich jedoch in der übergebenen Pull-Anforderung und kompiliert (und erstellt mit mvn install) lokal.
Wenn ich ein neues commit machen, Travis die Build ausführt, wie folgt:
$ mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
Der Reaktor anordnet richtig die um baut:
[INFO] Reactor Build Order:
[INFO]
[INFO] oshi-parent
[INFO] oshi-core
[INFO] oshi-json
Die Mutter baut und dann oshi-core
aufbaut, Speichern des kompilierten Codes lokal:
[INFO] Building jar: /home/travis/build/dblock/oshi/oshi-core/target/oshi-core-3.0-SNAPSHOT.jar
Dies ist die j Ich möchte das nächste Modul abhängig machen.Wenn jedoch die oshi-json
Build beginnt, es stattdessen lädt das Artefakt von Maven statt:
[INFO] Downloading: https://oss.sonatype.org/content/repositories/snapshots/com/github/dblock/oshi-core/3.0-SNAPSHOT/oshi-core-3.0-20160624.032041-9.jar
[INFO] Downloaded: https://oss.sonatype.org/content/repositories/snapshots/com/github/dblock/oshi-core/3.0-SNAPSHOT/oshi-core-3.0-20160624.032041-9.jar (199 KB at 708.5 KB/sec)
EDIT: Gerade bemerkt die folgende Warnung, die kurz vor dem Download auftritt, die nicht relevant sind oder nicht (an error in Travis settings aber), dass die Warnung Fixierung löst immer noch nicht mein Problem, here's a failed build without the warning:
[WARNING] Failure to transfer com.github.dblock:oshi-core:3.0-SNAPSHOT/maven-metadata.xml from https://nexus.codehaus.org/snapshots/ was cached in the local repository, resolution will not be reattempted until the update interval of codehaus-snapshots has elapsed or updates are forced. Original error: Could not transfer metadata com.github.dblock:oshi-core:3.0-SNAPSHOT/maven-metadata.xml from/to codehaus-snapshots (https://nexus.codehaus.org/snapshots/): nexus.codehaus.org
Dies ist ein vorübergehendes Problem im Zusammenhang nur mit Travis-CI; Das Pom-Setup wird funktionieren, sobald ich alle Module freigegeben habe, und ich kann es umgehen, indem ich lokal mvn clean deploy
ausführe, um das neue oshi-core
zum OSS-Repository zu schieben, damit Travis glücklich ist. Dies scheint jedoch ein schlechter Workaround zu sein.
Gibt es eine Möglichkeit, dass Travis CI das gerade kompilierte jar verwenden kann, anstatt ein neues herunterzuladen - und zwar so, dass der beabsichtigte Download der Abhängigkeit vom Repository nicht unterbrochen wird Sobald es veröffentlicht ist?
Können Sie aus allen relevanten Modulen der pom geben Dateien sonst ist es schwer etwas Nützliches zu sagen. Während eines Multi-Modul-Builds sollte nichts von irgendwo heruntergeladen werden, da es aus dem Reaktor gelöst wird. – khmarbaise
@khmarbaise Ich erweiterte die Auszüge und verlinkte mit den ursprünglichen Poms (und einem fehlgeschlagenen Build) auf meiner Github-Site. Sie können wahrscheinlich [upstream Projekt verzweigen] (https://github.com/dblock/oshi), um lokal zu experimentieren, wenn Sie möchten. –