Vorhandenes Eclipse-Projekt in Maven-Projekt konvertieren

246

Für ein Projekt bei der Arbeit erwägen wir, das Maven-Plugin für Eclipse zu verwenden, um unsere Builds zu automatisieren. Im Moment ist das Verfahren weitaus komplizierter als es eigentlich sein sollte, und wir hoffen, dass Maven die Dinge mit einem Klick vereinfachen wird.

Meine Frage ist, gibt es einen Assistenten oder einen automatischen Importer zum Konvertieren eines vorhandenen Eclipse Java-Projekts in ein Maven-Projekt mithilfe des Maven-Plugins? Oder sollte ich ein neues Maven-Projekt erstellen und alle Quelldateien, Bibliotheken usw. manuell kopieren?

Tom G.
quelle
3
Verwendet Ihr vorhandener Build ein Ant-Skript?
Matt B
4
Sie sollten wahrscheinlich die akzeptierte Antwort wechseln
Mr_and_Mrs_D

Antworten:

141

Wenn Sie nur ein Standard-POM erstellen und die m2eclipse-Funktionen aktivieren möchten: Ich gehe davon aus, dass Sie derzeit kein alternatives automatisiertes Build-Setup haben, das Sie importieren möchten, und ich gehe davon aus, dass Sie über das m2eclipse-Plugin sprechen.

Das m2eclipse-Plugin bietet eine Rechtsklickoption für ein Projekt, um diese Standard-pom.xml hinzuzufügen:

Neuere M2E-Versionen

Klicken Sie mit der rechten Maustaste auf Projekt -> Untermenü Konfigurieren -> In Maven-Projekt konvertieren

Ältere M2E-Versionen

Klicken Sie mit der rechten Maustaste auf Projekt -> Untermenü Maven -> Abhängigkeitsverwaltung aktivieren.

Das wird das Notwendige tun, um das Plugin für dieses Projekt zu aktivieren.


Um zu antworten, gibt es einen automatischen Importeur oder Assistenten? ': nicht, dass ich davon Wüste. Mit der obigen Option können Sie das m2eclipse-Plugin für Ihr vorhandenes Projekt aktivieren und das manuelle Kopieren vermeiden. Sie müssen weiterhin die Abhängigkeiten und andere Dinge einrichten, die Sie selbst erstellen müssen.

Brabster
quelle
Obwohl es M2Eclipse aktiviert, ist es nicht wirklich ein Assistent, der kein vorhandenes Eclipse-Projekt importiert. Vielmehr bietet es dem Benutzer die Möglichkeit, Abhängigkeiten usw. auszuwählen, was schwierig sein kann, wenn der Benutzer nicht viel Erfahrung mit Maven hat.
Kaleb Pederson
Ich habe die Frage so interpretiert, dass ich ein neues Projekt erstellen und manuell kopieren muss, um das m2eclipse-Plugin zu verwenden.
Brabster
16
Der Maven-Menüpunkt ist für mich nicht über das Rechtsklick-Menü (neueste m2eclipse) verfügbar. Chengdongs Antwort funktioniert.
Wulfgarpro
8
In der aktuellen Version von Eclipse (4.2) und m2eclipse lautet der Menüpunkt Konvertieren / In Maven-Projekt konvertieren.
Jesper
12
@ Jesper Menüpunkt ist "Configure / Convert to Maven Project"
Angelcervera
293

Ab m2e 0.13.0 (falls nicht früher als) können Sie ein Java-Projekt über das Kontextmenü in ein Maven-Projekt konvertieren. Hier ist, wie:

  • Klicken Sie mit der rechten Maustaste auf das Java-Projekt, um das Kontextmenü aufzurufen
  • Wählen Sie Konfigurieren> In Maven-Projekt konvertieren

Hier sind die detaillierten Schritte mit Screenshots.

Chengdong
quelle
30
Dadurch werden die Verzeichnisstrukturen immer noch nicht erstellt und Abhängigkeiten in pom hinzugefügt.
Klaus Nji
2
erstellt m2e immer noch nicht die maven-Verzeichnisstruktur und fügt Abhängigkeiten in pom hinzu?
Mr_and_Mrs_D
2
Meine unten erwähnte Lösung (@ShriKant Vashishtha) löst alle hier beschriebenen Probleme. Erstellt eine Maven-Struktur, entfernt Leerzeichen in
Ordnernamen
Funktioniert zu dieser Zeit perfekt und fehlerfrei unter Windows 10 Eclipse Mars.
Matthis Kohli
Es funktioniert perfekt für mich
WitnessTruth
12

Ich hatte das gleiche Problem und wollte den gesamten Eclipse-Arbeitsbereich mit etwa 60 Eclipse-Projekten mavenisieren. Dies manuell zu tun, erforderte viel Zeit und alternative Optionen waren nicht so realisierbar. Um das Problem zu lösen, habe ich endlich ein Projekt namens Eclipse-to-Maven auf Github erstellt. Da Eclipse nicht über alle erforderlichen Informationen zu den Abhängigkeiten verfügt, führt es Folgendes aus:

  • Basierend auf <classpathentry/>XML-Elementen in der .classpath-Datei werden die Abhängigkeiten von einem anderen Projekt erstellt, die JAR-Datei der Bibliothek identifiziert und anhand ihres Namens (z. B. jakarta-oro-2.0.8.jar) die Version identifiziert. Derzeit artifactIdund groupIdsind die gleichen, als ich etwas nicht finden konnte, das mir die Maven-Gruppen-ID der Abhängigkeit basierend auf zurückgeben könnte artifactId. Obwohl dies keine perfekte Lösung ist, bietet es einen guten Grund, um die Mavenisierung zu beschleunigen.

  • Es verschiebt alle Quellordner gemäß der Maven-Konvention (wie src/main/java)

  • Da Eclipse-Projekte mit Namen mit Leerzeichen in einer Linux / Unix-Umgebung nur schwer zu verarbeiten sind, werden sie auch mit Namen ohne Leerzeichen umbenannt.

  • Die resultierenden pom.xml-Dateien enthalten die Abhängigkeiten und die grundlegende Pom-Struktur. Sie müssen die erforderlichen Maven-Plugins manuell hinzufügen.

ShriKant Vashishtha
quelle
Interessant! Wird es nach Luna portiert? Wäre das Projekt immer noch ein Eclipse-Projekt (gültig .classpathund .projectDateien)? Können Sie Ihrer Antwort hinzufügen, wie Sie mit Ihrem Plugin ein einfaches JavaSE-Projekt mavenisieren - und wie würden sich die Verzeichnisstrukturen tatsächlich ändern?
Mr_and_Mrs_D
Entschuldigung, aber ich weiß nicht, was Luna ist. Es ist kein gültiges Eclipse-Projekt mehr, da die Projektverzeichnisstruktur geändert wird. Das Erstellen geänderter Eclipse-Konfigurationen mit Maven ist jedoch einfach. Dies ist kein Plugin, sondern ein Tool. Wie es ausgeführt wird, ist bereits in der README-Datei des Projekts erwähnt. Die Verzeichnisstruktur wird in der Maven-Konvention konvertiert. So gehen alle Quellen zum Beispiel zu src / main / java.
ShriKant Vashishtha
Luna ist die neueste Version von Eclipse !!
Mr_and_Mrs_D
7

Klicken Sie mit der rechten Maustaste auf den Projektnamen> Konfigurieren> In Maven-Projekt konvertieren> klicken Sie auf Fertig stellen. Hier fügen Sie einige Abhängigkeiten zum Herunterladen hinzu und fügen Ihre erwartete JAR-Datei hinzu.

Dadurch wird eine automatisch generierte Datei pom.xml erstellt. Öffnen Sie diese Datei im XML-Format in Ihrem Eclipse-Editor. </build>Fügen Sie nach dem Erstellen von tag ( ) Ihre Abhängigkeiten hinzu, die Sie von der maven-Website kopieren können, und fügen Sie sie dort hinzu. Jetzt können Sie loslegen. Diese Abhängigkeiten fügen automatisch Ihre erforderlichen JAR-Dateien hinzu.

Omar Faroque Anik
quelle
1
Wird dadurch die Maven-Ordnerstruktur erstellt?
Mr_and_Mrs_D
Ja, es wird die Maven-Ordnerstruktur basierend auf der entsprechenden zugeordneten Archetypvorlage und der Mindestkonfiguration erstellt. Sie müssen jede Ihrer Projektabhängigkeiten (von .classpath) einzeln manuell in POM.xml einfügen.
Pratap Singh
5

Chengdongs Antwort ist richtig, sollten Sie verwenden Configure>Convert to Maven Project. Ich muss jedoch hinzufügen, dass der Konvertierungsprozess erheblich verbessert wurde, da m2e 0.13.0: m2e 1.1+ und m2e-wtp 0.16.0+ jetzt die vorhandenen Eclipse-Einstellungen in die Maven-Plugin-Konfiguration konvertieren können .

In Bezug auf die Abhängigkeitskonvertierung können Sie die JBoss Tools (JBT) 4.0 Maven-Integrationsfunktion ausprobieren, die einen experimentellen Konvertierungsassistenten enthält, der in den Konvertierungsprozess von m2e integriert ist: http://docs.jboss.org/tools/whatsnew/maven/ maven-news-4.0.0.Beta1.html .

Es gibt nicht vor, die ultimative Lösung zu sein (nichts kann es), es sollte wesentlich dazu beitragen, Ihren Maven-Konvertierungsprozess zu starten.

Außerdem, zu Ihrer Information , hier sind einige Ideen, um den Konvertierungsprozess von m2e zu verbessern. Das Refactoring zur Verwendung eines Maven-Layouts wird höchstwahrscheinlich in Zukunft implementiert.

JBT 4.0 (erfordert Eclipse JavaEE Juno) kann von http://download.jboss.org/jbosstools/updates/stable/juno/ oder vom Eclipse Marketplace installiert werden

Fred Bricon
quelle
4

Dies ist notwendig, da es sich beim Importieren eines Projekts aus git mehr oder weniger nicht um ein Maven-Projekt handelt, sodass sich die Maven-Abhängigkeiten nicht im Erstellungspfad befinden.

Folgendes habe ich getan, um aus einem allgemeinen Projekt ein Maven-Projekt zu machen.

Allgemeines Projekt -> Java-Projekt Klicken Sie mit der rechten Maustaste auf das Projekt, Eigenschaften-> Projektfacetten, klicken Sie auf "Java". Dieser Schritt verwandelt ein allgemeines Projekt in ein Java-Projekt.

Java-Projekt -> Maven-Projekt Rechtsklick auf Projekt, konfigurieren -> In Maven-Projekt konvertieren Derzeit befinden sich die Maven-Abhängigkeiten lib noch nicht im Erstellungspfad. Projekteigenschaften, Erstellungspfad , Bibliothek hinzufügen, Maven-Abhängigkeiten hinzufügen lib

Und warten Sie ein paar Sekunden, wenn die Abhängigkeiten geladen sind, ist das Projekt fertig!

Mondhang
quelle
2

Es gibt ein Befehlszeilenprogramm zum Konvertieren eines Java-Projekts in ein SBT / Maven-Projekt.

Es löst alle Jars auf und versucht, die richtige Version basierend auf der SHA-Prüfsumme, dem Klassenpfad oder dem Dateinamen herauszufinden. Anschließend wird versucht, die Quellen zu kompilieren, bis eine funktionierende Konfiguration gefunden wird. Benutzerdefinierte Aufgaben, die pro Abhängigkeitskonfiguration ausgeführt werden sollen, können ebenfalls angegeben werden.

UniversalResolver 1.0
Usage: UniversalResolver [options]

  -s <srcpath1>,<srcpath2>... | --srcPaths <srcpath1>,<srcpath2>...
        required src paths to include
  -j <jar1>,<jar2>... | --jars <jar1>,<jar2>...
        required jars/jar paths to include
  -t /path/To/Dir | --testDirectory /path/To/Dir
        required directory where test configurations will be stored
  -a <task1>,<task2>... | --sbt-tasks <task1>,<task2>...
        SBT Tasks to be executed. i.e. compile
  -d /path/To/dependencyFile.json | --dependencyFile /path/To/dependencyFile.json
        optional file where the dependency buffer will be stored
  -l | --search
        load and search dependencies from remote repositories
  -g | --generateConfigurations
        generate dependency configurations
  -c <value> | --findByNameCount <value>
        number of dependencies to resolve by class name per jar

https://bitbucket.org/mnyx/universalresolver

Alex
quelle
Dies scheint eine sehr attraktive Option zu sein. Da es derzeit verpackt ist, ist es jedoch nicht sehr zugänglich. Es ist nicht ersichtlich, wie der Quellcode gepackt und bereitgestellt wird. Die meisten Java-Entwickler sind weder Scala-Entwickler noch ist SBT ein weit verbreitetes Tool in der Community.
A. Rick
1

Meine Frage ist, gibt es einen Assistenten oder einen automatischen Importer zum Konvertieren eines vorhandenen Eclipse Java-Projekts in ein Maven-Projekt mithilfe des Maven-Plugins?

Soweit ich weiß, gibt es nichts, was ein Eclipse-Projekt automatisch in ein Maven-Projekt konvertieren könnte (dh das Layout ändern, ein POM erstellen, "generieren" und mit Metadaten füttern, Bibliotheken und deren Versionen erkennen, um sie dem POM hinzuzufügen , etc). Eclipse verfügt einfach nicht über genügend Metadaten, um dies zu ermöglichen (genau das ist der Punkt des POM) und / oder um ein anständiges Ergebnis zu erzielen.

Oder sollte ich ein neues Maven-Projekt erstellen und alle Quelldateien, Bibliotheken usw. Manuell kopieren?

Das wäre meiner Meinung nach die beste Option. Erstellen Sie ein Maven-Projekt, kopieren / verschieben Sie Quellen, Ressourcen, Tests, testen Sie Ressourcen in ihre jeweiligen Verzeichnisse, deklarieren Sie Abhängigkeiten usw.

Pascal Thivent
quelle
Warum ist diese Antwort höher als die Antwort +199? Ich habe das fast nicht gesehen
Evorlor
1

Für die Konvertierung in Gradle ist analog zu Maven:

Klicken Sie mit der rechten Maustaste auf Projekt -> Untermenü Konfigurieren -> In Gradle (STS) -Projekt konvertieren

Ein weiterer
quelle
4
Die Antwort ist nicht relevant für die Frage
Ripon Al Wasim
1
Ich habe diese Frage gefunden, indem ich nach Gradle gesucht habe. Oft ist es hilfreich, Antworten für andere Betriebssysteme anstelle des gestellten Betriebssystems hinzuzufügen, da es keine Frage für den Einzelfall gibt. In Bezug auf Gradle würde ich keine neue Frage erstellen, um zu beantworten, was ich für hilfreich halte, sondern ich poste diese. Danke und Grüße.
weiterer