Wie kann ich mit Eclipse m2e auf ein anderes Workspace-Projekt verweisen?
Muss ich eine Projektabhängigkeit in der Projekteinstellung hinzufügen? In diesem Fall wird die Abhängigkeit jedoch nicht im Pom gezeigt.
Wenn ich sie im Pom setze, referenziert sie nicht das Projekt im Arbeitsbereich, sondern das Jar im lokalen Repository. Ganz ärgerlich, kann jemand helfen?
Der korrekte Weg, dies zu tun, ist der folgende:
Dies sollte Ihr Problem lösen. Wenn danach noch auf Ihre Abhängigkeiten aus dem Dateisystem verwiesen wird, überprüfen Sie die groupId , artifactId und insbesondere version der jeweiligen Abhängigkeit erneut.
Überprüfen Sie auch, ob in Ihrem Projekt keine Fehler vorliegen. Versuchen Sie, die Installation von Maven auszuführen.
Ich würde noch weiter gehen als dies .. Wenn Sie ever in Ihrem Projekt mvn Eclipse:eclipse
ausgeführt haben, haben Sie wahrscheinlich Probleme. Ich hatte eine Situation, in der ich in meinem Eclipse-Projekt sowohl einen Abschnitt "Referenced Libraries" als auch einen Abschnitt "Maven Dependencies" hatte, mit widersprüchlichen Bibliotheksversionen, die Eclipse und mich selbst unvermeidliche Verwirrung verursachten.
Die sicherste Sache, die ich gefunden habe, war, mvn Eclipse:clean
von der Kommandozeile aus auszuführen, dann wieder zu Eclipse zurückzukehren, das Projekt zu aktualisieren, "OK" des sich ergebenden Problemdialogfelds zu wählen und dann Maven> Update Project aufzurufen. Das hat alles für mich gelöst.
Wenn Eclipse mehrere Projekte importiert und gelöscht hat, müssen Sie möglicherweise den Index der Maven-Repositorys neu erstellen. Hier ist ein Weg, den ich getan habe.
Prüfen Sie, ob ein referenziertes Projekt von Eclipse ordnungsgemäß als Maven-Projekt erkannt wird.
Klicken Sie in der Menüleiste auf Window -> Show View -> Other...
.
Wenn das Fenster "Ansicht anzeigen" angezeigt wird, wählen Sie Maven -> Maven Repositories
aus.
Im Maven-Repository-Fenster sollten Sie Ihr Projekt als JAR-Datei in Local Repositories -> Workspace Projects
sehen.
Wenn Sie Ihr Projekt nicht in Workspace Projects
finden können, klicken Sie mit der rechten Maustaste auf Workspace Projects
und wählen Sie Rebuild Index
.
Aktualisieren Sie den Ordner eines referenzierenden Projekts
Klicken Sie mit der rechten Maustaste auf das referenzierende Projekt, Maven -> Update Project... -> OK
Das Hauptproblem ist, dass die Antwort von @ nwinkler mit der Versionsnummer übereinstimmt.
Ein häufiges Szenario ist das Entwickeln einer Reihe von Projekten mit Versionssperrung, z. B. eines Projekts und einer Reihe von Bibliotheksprojekten, die nicht sehr locker miteinander verbunden sind, sodass sich eine Bibliotheks-API in a möglicherweise ändert Version, die von der jeweiligen App-Projektversion verwendet werden soll, sich jedoch möglicherweise in einer Weise ändert, die nicht mit einer früheren oder zukünftigen Version des App-Projekts kompatibel ist.
Die richtige Methode zum Festlegen von Maven-Abhängigkeiten in einer solchen Konfiguration (und dies wird auch empfohlen) besteht darin, dass die App bestimmte Versionen der Bibliotheken verwendet. Wenn Sie also beispielsweise eine alte Version der App neu erstellen, wird diese verwendet die Bibliotheksversion, mit der es zuvor kompiliert wurde.
Wenn die POM-Bibliotheksabhängigkeit des App-Projekts auf eine Release-Version festgelegt ist (sagen wir 1.0.0
) Und während der Arbeit an der nächsten Version sowohl die App- als auch die Bibliotheksprojekte auf eine SNAPSHOT-Version festgelegt sind (sagen wir 2.0.0-SNAPSHOT
) wird das m2e die Bibliotheksversion nicht korrekt auflösen und wird wahrscheinlich eine alte Version herunterladen, so dass der Versuch, Eclipse-Funktionen wie "Open Decleration" zu verwenden, auf das Download-Jar abzielt (manchmal sogar ohne Quellanhang), was hübsch sein kann nervig.
Eine Möglichkeit, dies zu umgehen, besteht darin, die POM-Abhängigkeitsversion der App auf einen Bereich festzulegen. Anstatt also von 1.0.0
Abzuhängen, würden Sie von [1.0.0-)
Abhängen. Mit einem solchen offenen Bereich findet m2e gerne Ihr Arbeitsbereich-Bibliotheksprojekt. Sie sollten es jedoch vor dem Festschreiben, Erstellen und Veröffentlichen auf die "richtige" Version zurücksetzen. Dies kann sehr fehleranfällig sein.
Meine Lösung besteht darin, Build-Profile zu verwenden und ein benutzerdefiniertes Profil für m2e festzulegen:
...
<properties>
<my.library.version>1.0.0</my.library.version>
</properties>
<dependencies>
<dependency>
<groupId>my.group</groupId>
<artifactId>my.library</artifactId>
<version>${my.library.version}</version>
</dependency>
</dependencies>
...
...
<profiles>
<profile>
<id>default</id>
<activation><activeByDefault></activeByDefault></activation>
</profile>
<profile>
<id>Eclipse</id>
<properties>
<my.library.version>[1,)</my.library.version>
</properties>
</profile>
</profiles>
...
Eclipse m2e sieht dann immer den Versionsbereich und löst Abhängigkeiten aus dem Eclipse-Projekt auf (auch wenn Sie die Bibliothek im lokalen Maven-Repository installiert haben, da das Eclipse-Projekt eine höhere Versionsnummer hat), aber andere Builder sehen das Original strenge Versionsnummer.
Sie müssen auch sicherstellen, dass Sie die richtigen Ziele erreichen.
Wenn Sie das Ziel install nicht ausführen, wird es nicht in Ihr Repository kopiert und nicht kompiliert.
Weitere Informationen zu Zielen finden Sie unter https://maven.Apache.org/guides/introduction/introduction-to-the-lifecycle.html .