2012-09-25 2 views
13

Ich benutze Apache Maven, um meine Java-Bibliotheken (jar) und einige der Projekte zu verwalten, die die Bibliotheken benutzen. Zur Vereinfachung verwende ich mvn eclipse:eclipse, um Eclipse-Projektdateien zu generieren, die zur Bearbeitung in den Eclipse-Arbeitsbereich importiert werden können.Wie kann man Maven sagen, dass es die Jar-Abhängigkeit und nicht das Quellverzeichnis des Unterprojekts in Eclipse einbeziehen soll?

Probleme entstehen, wenn ich das Hauptprojekt und die Java-Lib-Projekte im selben Eclipse-Arbeitsbereich bearbeite. Das heißt, mvn eclipse:eclipse enthält src Pfad Abhängigkeit in .classpath Datei, nicht die jar Abhängigkeit wie erwartet.

Angenommen, ich habe ein Jave lib-Projekt mit dem Namen mylib. Die entsprechende JAR-Datei mylib.jar wurde in einem von mir unterhaltenen privaten Maven Repo bereitgestellt. Um mylib.jar im Hauptprojekt zu verwenden, ist die folgende Abhängigkeit in pom.xml enthalten.

<!-- pom.xml for the main project --> 
<dependency> 
    <groupId>namespace.my</groupId> 
    <artifactId>mylib</artifactId> 
    <version>[1.0,)</version> 
</dependency> 

mvn compile und mvn test Arbeit perfekt, in der mylib.jar automatisch aus meinem Repo heruntergeladen. Beim Versuch, mvn eclipse:eclipse auszuprobieren, finde ich jedoch, dass die generierte .classpath-Datei die mylib.jar-Abhängigkeit nicht wie erwartet enthält. Stattdessen enthält es Quelldateiverzeichnis für Mylib wie folgt.

Es scheint, dass Maven Eclipse-Metadaten liest und mylib und das Hauptprojekt in demselben Arbeitsbereich findet. Daher enthält Maven die Quelle für mein Wohl. Verdammt. Wie kann ich sagen, dass maven die lokale Projektquelle ignoriert und nur die JAR-Datei einfügt?

+0

Warum don‘ nst du stattdessen das m2e Eclipse Plugin? –

+1

Weil ich mich wohl fühle, Befehle in der Konsole einzugeben - Kompilierung, Test, Verpackung werden alle in einem Befehl ausgeführt. Außerdem können nützliche Konfigurationssegmente in pom.xml problemlos in anderen Projekten wiederverwendet werden. Eclipse ist gut, aber zu viele Menüs und zahlreiche Plugins sehen für mich kompliziert aus. –

+0

Die beiden schließen sich nicht unbedingt gegenseitig aus, obwohl Sie auf das Maven Eclipse-Plugin verzichten müssen, um m2e zu verwenden. Ich finde Eclipse praktisch zum Debuggen und m2e garantiert, dass der Build-Prozess innerhalb und außerhalb von Eclipse so ähnlich wie möglich ist. –

Antwort

12

Ich glaube, das ist, weil sie verwandte Projekte in Eclipse sind. Wenn Sie also mit der rechten Maustaste auf Ihr Hauptprojekt klicken und zu Project References gehen, sollte Ihr lib-Projekt angekreuzt sein.

Wenn Sie mvn eclipse:eclipse ausführen, werden automatisch Projektreferenzen für alle Unterprojekte (Module) hinzugefügt. Sie können dies mit der useProjectReferences Eigenschaft des Maven Eclipse Plugins ändern.

Es standardmäßig true, aber

Wenn auf false gesetzt ist, wird das Plugin nicht Teilprojekte erstellen und stattdessen Referenz dieser Teilprojekte des installierte Paket in der lokalen Repository mit

Um die Eigenschaft zu verwenden, legen Sie die Eigenschaft entweder in Ihrem Pom fest.xml

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-eclipse-plugin</artifactId> 
      <version>2.9</version> 
      <configuration> 
       <useProjectReferences>false</useProjectReferences> 
      </configuration> 
     </plugin> 
    <plugins> 
<build> 

Oder als Eigenschaft in der Befehlszeile:

mvn eclipse:eclipse -Declipse.useProjectReferences=false 
0

Eclipse muss den Pfad zum lokalen Maven-Repository kennen. Daher muss die Klassenpfadvariable M2_REPO gesetzt werden. Führen Sie den folgenden Befehl ein:

mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo 

Sie können auch eine neue Classpath Variable in Eclipse definieren: in der Menüleiste, wählen Sie Window > Preferences. Select the Java > Build Path > Classpath Variables page.

Sie dann das Projekt mvn eclipse:eclipse

Hoffnung durch die Ausführung, das hilft!

0

Vielen Dank für Hound Dog Andeutungen. Ja, useProjectReferences steuert Maven, wie Sie mit Unterprojekten umgehen - einschließlich Quellverzeichnis oder JAR-Dateien.

Ich habe das Maven-Plugin für Eclipse nicht installiert, daher füge ich folgende Konfiguration in pom.xml hinzu. Es teilt Maven mit, die Jar-Abhängigkeit in das lokale Maven-Repository aufzunehmen, nicht in das Quellverzeichnis. Wenn die erforderliche JAR-Datei im lokalen Repo nicht vorhanden ist, wird sie automatisch im laufenden Betrieb heruntergeladen.

<!-- pom.xml for the main project: include jar, not src path --> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-eclipse-plugin</artifactId> 
    <version>2.9</version> 
    <configuration> 
      <useProjectReferences>false</useProjectReferences> 
    </configuration> 
    </plugin> 

Jetzt mvn eclipse:eclipse funktioniert wie erwartet.

+0

Ich habe meine Antwort aktualisiert, um dies zu reflektieren, sowie die Befehlszeilenalternative. Wenn Sie damit zufrieden sind, vergessen Sie nicht, sie als richtige Antwort auszuwählen :) –

0

Versuchen Sie einfach den Typ Element innerhalb Abhängigkeits-Tag und Quelle/jar als Typ in Ihrem pom.xml erwähnen

<!-- pom.xml for the main project --> 
<dependency> 
    <groupId>namespace.my</groupId> 
    <artifactId>mylib</artifactId> 
    <version>[1.0,)</version> 
    <type>jar<type> <!-- source/jar --> 
</dependency> 
+1

Es funktioniert nicht. – Marcin

0

ich vor kurzem erfahren haben, dass dieses Verhalten von der angegebenen Version ausgelöst wird in den pom.xml-Dateien. Wenn die Version der Lib, von der Ihr primäres Projekt abhängt, im Arbeitsbereich für Eclipse verfügbar ist (zB ein Projekt mit der passenden pom.xml [Gruppe, Artefakt, Version] für die lib), wird dies als Projektreferenz verwendet von der M2REPO-Location gezogen zu werden.

Meine Lösung war, die Version der Bibliothek pom.xml im Arbeitsbereich in eine andere Version zu ändern, die es mir erlaubt, die lib zu verbessern, während das primäre Projekt immer noch die ältere lib von M2REPO zog.

Wenn Sie dies durch Ausrichten der Versionsnummern verwenden, können Sie gleichzeitig Artefaktverbesserungen/Änderungen mit wenig Aufwand durchführen.

Ich habe noch nicht getestet, ob Sie die mvn eclipse:eclipse jedes Mal ausführen müssen, wenn Sie die lib pom.xml-Dateien und die primären pom.xml-Abhängigkeiten ändern, aber ich würde erwarten, dass es so ist.

9

Ich muss vermeiden, die Abhängigkeit als ein Refrenced-Projekt, sondern als ein Jar. Mit Eclipse 4.6 Neon funktioniert keine der vorherigen Lösungen.

hatte ich deaktivieren Sie die Workspace Resolution Funktion

click on the project -> Maven -> Disable Workspace Resolution 
+0

Danke! Habe meinen Tag gerettet! –

+0

Vielen Dank! Es hat für mich funktioniert. –

0

Ich habe versucht, das Projekt in Eclipse schließen & der Arbeitsbereich nur selbst gebaut, diesmal das Glas aus dem Repository nehmen statt Verknüpfung des Projekts

Verwandte Themen