wake-up-neo.com

Wie referenzieren Sie in Eclipse m2e das Arbeitsbereichprojekt?

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? 

27
Wudong

Der korrekte Weg, dies zu tun, ist der folgende:

  • Verwenden Sie ausschließlich den Abschnitt "Abhängigkeiten" in der POM-Datei, und achten Sie nicht auf die Eclipse-Projektverweise. Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie dann Maven> Update Project Configuration aus, um das Projekt auf die Maven-Standardeinstellungen zurückzusetzen. Auf diese Weise hat m2e das Eigentum an den Abhängigkeiten.
  • Stellen Sie sicher, dass alle referenzierten Projekte in Eclipse geöffnet sind und Maven nature aktiviert sind.
  • Überprüfen Sie die Maven-Einstellungen für jedes Projekt. Stellen Sie sicher, dass groupId , artifactId und version mit den in Eclipse geöffneten Projekten übereinstimmen. Wenn das Projekt, auf das Sie angewiesen sind, über die Version 1.0.0-SNAPSHOT in Eclipse verfügt, stellen Sie sicher, dass die POM-Datei des abhängigen Projekts auf die Version 1.0.0-SNAPSHOT im Abschnitt dependencies verweist.
  • Aktivieren Sie Workspace Resolution für jedes Projekt. Klicken Sie mit der rechten Maustaste auf das Projekt und anschließend auf Maven> Enable Workspace Resolution .
  • Wenn die Projekte immer noch nicht aufgelöst sind, klicken Sie erneut mit der rechten Maustaste auf das Projekt. Maven> Projekt aktualisieren

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.

55
nwinkler

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.

6
Huw Roberts

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.

  1. 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.

  2. Aktualisieren Sie den Ordner eines referenzierenden Projekts

    Klicken Sie mit der rechten Maustaste auf das referenzierende Projekt, Maven -> Update Project... -> OK

4
heemin

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:

  • Legen Sie Ihre Abhängigkeitsversion mit einer Eigenschaft auf die Version fest, für die Sie veröffentlichen möchten:
...

<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>

...
  • Fügen Sie dann einen Profilabschnitt mit einem standardmäßig aktiven Profil hinzu, das nichts tut, und ein Eclipse-spezifisches Profil, das die Eigenschaft der Bibliotheksversion mit einem Bereich überschreibt:
...

<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>

...
  • Gehen Sie schließlich zu Ihren Projekteigenschaften und geben Sie unter "Maven" "Eclipse" in "Active Maven Profiles" ein:

enter image description here

  • Dann "Übernehmen und schließen".

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.

0
Guss

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 .

0
Clare McLennan