2017-06-23 6 views
0

Entschuldigen Sie sich für die Verwendung von Akronymen im Voraus.Fehlende transitive Maven-Abhängigkeit des lokalen Gefäßes

Ich arbeite ein Maven-Projekt Foo, die auf einem lokalen Glas Bar abhängt. Bar ist auch mit Maven gebaut und da es ein lokales Glas ist, habe ich ein lokales Repo in Foo 's Ordnerstruktur erstellt, und legte das Glas dort.

Bar.jar wird auf base_dir_of_Foo\repo\group_ID\artifact_ID\1.0-SNAPSHOT\Bar.jar gesetzt.

Das Problem, das ich habe, ist, dass, wenn ich Foo laufen lasse, es eine NoClassDefFoundError wirft, weil es eine Klasse in einer der Bar Abhängigkeiten nicht finden kann. Also, Foo fehlt eine transitive Abhängigkeit durch Bar.

Eine Sache zu beachten ist, dass, wenn ich mvn clean package für Foo laufen lasse, sah ich eine Warnung sagt "Missing POM for Bar". Foo ruft B mit Reflektion und Foo kann Klassen in Bar definiert finden, aber sieht aus wie A kann Bar 's Abhängigkeiten nicht herausfinden. Irgendeine Idee, warum das passiert?

Lokale repos in Foo ‚s pom.xml definiert:

<repositories> 
    <repository> 
     <id>local-repo</id> 
     <name>Local</name> 
     <url>file://${basedir}/repo</url> 
    </repository> 
</repositories> 

Schließlich Foo wird in Abhängigkeit von Bar mit Standard kompilieren -umfang:

<dependency> 
    <groupId>group_ID</groupId> 
    <artifactId>artifact_ID</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</dependency> 

Update: ich, warum pom gefunden von Bar wird nicht gefunden, weil wir Bar.jar auf lokales Repo setzen, maven wird nur über die JAR-Datei in lokale Repos kopieren iterory cache, es wird pom.xml nicht aus dem jar extrahieren, wird das erwartet?

Inside C: \ Benutzer \ hancwang.m2 \ repository \ Gruppen-ID \ Bar \ 1.0-SNAPSHOT, ich sehe Bar-1.0-snapshot.jar über kopiert werden, aber es gibt keine Bar-1.0-Snapshot. Pom.

+0

do you Bar Quellcode mit Maven lokal bauen? – nandsito

+0

Ja, tue ich, und dann kopiere ich Bar.jar zum lokalen Repo unter Foo. –

+0

Bitte versuchen Sie meine Antwort – nandsito

Antwort

1

Ihre <repository> Definition verweist wahrscheinlich auf ein unvollständiges Repository, z. Ein Repo fehlt eine .pom Datei.

Vorausgesetzt, Sie erstellen Bar-Quellcode lokal, wenn Sie mvn install in Bar ausführen, installieren Sie sein Artefakt im lokalen Repository. Auf diese Weise wird Foo Bar normalerweise finden. Sie müssen in diesem Fall kein <repository> definieren.

Also, versuchen Sie zu:

  • Run mvn install oder mvn clean install in Bar
  • die <repository> Definition entfernen, die zu einem file:// jar Punkte
+0

Problem ist, dass eine andere Person git ziehen kann Foo, aber keinen Zugriff auf Bar, die Build von Foo fehlschlagen wird. –

+0

@HanchiWang kann nicht die andere Person Bar-Quellcode erstellen? – nandsito

+0

Sie können nicht wirklich, denn 1) Foo ist Open Source aber Bar ist nicht und 2) Ich möchte Kunden von Foo in der Lage sein, die JAR-Datei und MVN-Paket aus der Box zu führen. –

Verwandte Themen