Konwertuj istniejący projekt Eclipse na projekt Maven

246

W przypadku projektu w pracy rozważamy użycie wtyczki Maven dla Eclipse do automatyzacji naszych kompilacji. W tej chwili procedura jest o wiele bardziej skomplikowana, niż powinna być, i mamy nadzieję, że Maven uprości wszystko do kompilacji jednym kliknięciem.

Moje pytanie brzmi: czy istnieje kreator lub automatyczny importer do konwersji istniejącego projektu Java Eclipse na projekt Maven przy użyciu wtyczki Maven? A może powinienem utworzyć nowy projekt Maven i ręcznie skopiować wszystkie pliki źródłowe, biblioteki lib itp.

Tom G.
źródło
3
Czy twoja istniejąca wersja używa skryptu Ant?
matt b
4
Prawdopodobnie powinieneś zmienić zaakceptowaną odpowiedź
Mr_and_Mrs_D

Odpowiedzi:

141

Jeśli chcesz tylko utworzyć domyślną POM i włączyć funkcje m2eclipse: zakładam, że nie masz obecnie alternatywnej automatycznej konfiguracji kompilacji, którą próbujesz zaimportować, i zakładam, że mówisz o wtyczce m2eclipse.

Wtyczka m2eclipse zapewnia opcję kliknięcia prawym przyciskiem myszy projektu, aby dodać tę domyślną pom.xml:

Nowsze wersje M2E

Kliknij prawym przyciskiem myszy Projekt -> podmenu Konfiguruj -> Konwertuj na Projekt Maven

Starsze wersje M2E

Kliknij prawym przyciskiem myszy Projekt -> podmenu Maven -> Włącz zarządzanie zależnościami.

To wystarczy, aby włączyć wtyczkę dla tego projektu.


Aby odpowiedzieć ” czy istnieje automatyczny importer lub kreator? ': nie żebym o tym wiedział. Użycie powyższej opcji pozwoli włączyć wtyczkę m2eclipse dla istniejącego projektu, unikając ręcznego kopiowania. Nadal będziesz musiał skonfigurować zależności i inne rzeczy, które musisz sam zbudować.

Brabster
źródło
Chociaż włącza M2Eclipse, tak naprawdę nie jest to kreator, ale nie importuje istniejącego projektu Eclipse. Daje to raczej użytkownikowi możliwość wyboru zależności itp., Co może być trudne, jeśli użytkownik nie ma dużego doświadczenia z Maven.
Kaleb Pederson
Zinterpretowałem to pytanie jako „czy muszę utworzyć nowy projekt i ręcznie skopiować rzeczy, aby użyć wtyczki m2eclipse?”, Wyjaśnię.
brabster
16
Element menu maven nie jest dla mnie dostępny z menu po kliknięciu prawym przyciskiem myszy (najnowszy m2eclipse), odpowiedź Chengdong działa.
wulfgarpro
8
W bieżącej wersji Eclipse (4.2) i m2eclipse pozycja menu to Konwertuj / Konwertuj na Maven Project.
Jesper
12
Element menu @Jesper to „Konfiguruj / Konwertuj do projektu Maven”
angelcervera
293

Zacznij od m2e 0.13.0 (jeśli nie wcześniej niż), możesz przekonwertować projekt Java na projekt Maven z menu kontekstowego. Oto jak:

  • Kliknij prawym przyciskiem myszy projekt Java, aby wyświetlić menu kontekstowe
  • Wybierz Konfiguruj> Konwertuj na projekt Maven

Oto szczegółowe kroki ze zrzutami ekranu.

Chengdong
źródło
30
To wciąż nie tworzy struktur katalogów i nie dodaje zależności w pom.
Klaus Nji,
2
czy m2e nadal nie tworzy struktury katalogów maven i nie dodaje zależności w pom?
Mr_and_Mrs_D
2
Moje rozwiązanie (@ShriKant Vashishtha) wymienione poniżej rozwiązuje wszystkie opisane tutaj problemy. Tworzy strukturę Maven, usuwa spacje w nazwach folderów, tworzy pom.xml i przenosi foldery źródłowe w strukturze Maven
ShriKant Vashishtha
Działa idealnie i bezbłędnie na Windows 10 Eclipse Mars w tym czasie.
Matthis Kohli,
Działa idealnie dla mnie
WitnessTruth
12

Miałem ten sam problem i chciałem Mavenise cały obszar roboczy Eclipse zawierający około 60 projektów Eclipse. Wykonanie tego ręcznie wymagało dużo czasu, a alternatywne opcje nie były tak opłacalne. Aby rozwiązać problem, w końcu stworzyłem projekt o nazwie eclipse-to-maven na github. Ponieważ środowisko Eclipse nie ma wszystkich niezbędnych informacji o zależnościach, wykonuje następujące czynności:

  • Na podstawie <classpathentry/>elementów XML w pliku .classpath tworzy zależności od innego projektu, identyfikuje plik jar biblioteki i na podstawie jego nazwy (na przykład jakarta-oro-2.0.8.jar) identyfikuje jego wersję. Obecnie artifactIdi groupIdsą takie same jak ja nie mógł znaleźć coś, co mogłoby zwrócić mi Maven GroupID w oparciu o zależność artifactId. Chociaż nie jest to idealne rozwiązanie, stanowi dobrą podstawę do przyspieszenia procesu wulkanizacji.

  • Przenosi wszystkie foldery źródłowe zgodnie z konwencją Maven (jak src/main/java)

  • Ponieważ projekty Eclipse o nazwach ze spacjami są trudne w środowisku Linux / Unix, zmienia je również na nazwy bez spacji.

  • Wynikowe pliki pom.xml zawierają zależności i podstawową strukturę pom. Musisz ręcznie dodać wymagane wtyczki Maven.

ShriKant Vashishtha
źródło
Ciekawy ! Czy jest przeniesiony do Luny? Czy projekt nadal byłby projektem zaćmienia (ważny .classpathi .projectpliki)? Czy możesz dodać do swojej odpowiedzi, jak korzystać z wtyczki, aby uprościć prosty projekt JavaSE - i jakie byłyby rzeczywiste zmiany w strukturze katalogów?
Mr_and_Mrs_D
Przepraszam, ale nie wiem, czym jest Luna. Nie będzie już prawidłowym projektem zaćmienia, ponieważ zmieni się struktura katalogu projektu. Jednak tworzenie zmodyfikowanych konfiguracji zaćmień za pomocą Maven jest łatwe. To nie jest wtyczka, ale narzędzie. Jak to uruchomić, wspomniano już w README projektu. Struktura katalogów jest konwertowana w konwencji Maven. Więc wszystkie źródła trafiają na przykład do src / main / java.
ShriKant Vashishtha
Luna to najnowsza wersja Eclipse !!
Mr_and_Mrs_D
7

Kliknij prawym przyciskiem myszy nazwę projektu> Konfiguruj> Konwertuj na projekt Maven> kliknij Zakończ. Tutaj dodasz pewne zależności do pobrania i dodasz oczekiwany plik jar.

Spowoduje to utworzenie automatycznie generowanego pliku pom.xml. Otwórz ten plik w formacie xml w edytorze Eclipse. Po kompilacji tag ( </build>) dodaj swoje zależności, które możesz skopiować ze strony maven i tam je dodać. Teraz możesz już iść. Te zależności automatycznie dodają wymagane pliki jar.

Omar Faroque Anik
źródło
1
Czy to utworzy strukturę folderów maven?
Mr_and_Mrs_D
tak, utworzy strukturę folderu maven na podstawie odpowiedniego odwzorowanego szablonu archetypu i minimalnej konfiguracji. Musisz samodzielnie dodawać każdą zależność projektu (od .classpath) do POM.xml pojedynczo.
Pratap Singh
5

Odpowiedź Chengdong jest poprawna, powinieneś użyć Configure>Convert to Maven Project. Jednak muszę dodać, że proces konwersji został znacznie ulepszony, ponieważ m2e 0.13.0: m2e 1.1+ i m2e-wtp 0.16.0+ mogą teraz konwertować istniejące ustawienia zaćmienia na konfigurację wtyczki maven .

Jeśli chodzi o konwersję zależności, możesz wypróbować funkcję integracji JBoss Tools (JBT) 4.0 Maven, która zawiera eksperymentalny kreator konwersji podłączony do procesu konwersji m2e: http://docs.jboss.org/tools/whatsnew/maven/ maven-news-4.0.0.Beta1.html .

Nie udaje, że jest to najlepsze rozwiązanie (nic nie może), ponieważ powinno znacznie pomóc w rozruchu procesu konwersji Maven.

Ponadto, FYI, oto kilka pomysłów na usprawnienie procesu konwersji m2e , refaktoryzacja w celu użycia układu Maven najprawdopodobniej zostanie zaimplementowana w przyszłości.

JBT 4.0 (wymaga Eclipse JavaEE Juno) można zainstalować ze strony http://download.jboss.org/jbosstools/updates/stable/juno/ lub z Eclipse Marketplace

Fred Bricon
źródło
4

Jest to konieczne, ponieważ mniej więcej, kiedy importujemy projekt z git, nie jest to projekt maven, więc zależności maven nie znajdują się na ścieżce kompilacji.

Oto, co zrobiłem, aby zamienić ogólny projekt w projekt maven.

projekt ogólny -> projekt java kliknij prawym przyciskiem myszy projekt, właściwości-> aspekty projektu, kliknij „java”. Ten krok zamieni ogólny projekt w projekt Java.

projekt java -> projekt maven kliknij prawym przyciskiem myszy projekt, skonfiguruj -> przekonwertuj na projekt maven W tej chwili biblioteki zależności maven nadal nie znajdują się na ścieżce kompilacji. właściwości projektu, ścieżka kompilacji, dodaj bibliotekę, dodaj lib zależności zależności maven

I poczekaj kilka sekund, gdy załadowane zostaną zależności, projekt jest gotowy!

bimber
źródło
2

Istnieje program wiersza poleceń do konwersji dowolnego projektu Java na projekt SBT / Maven.

Rozwiązuje wszystkie słoiki i próbuje ustalić właściwą wersję na podstawie sumy kontrolnej SHA, ścieżki klasy lub nazwy pliku. Następnie próbuje skompilować źródła, dopóki nie znajdzie działającej konfiguracji. Można również podać niestandardowe zadania do wykonania według konfiguracji zależności.

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
źródło
To wygląda na bardzo atrakcyjną opcję. Ale ponieważ jest obecnie pakowany, nie jest bardzo dostępny. Nie wiadomo, jak spakować i wdrożyć kod źródłowy. Większość programistów Java nie jest programistami Scala, ani SBT nie jest powszechnie używanym narzędziem w społeczności.
A. Rick
1

Moje pytanie brzmi: czy istnieje kreator lub automatyczny importer do konwersji istniejącego projektu Java Eclipse na projekt Maven przy użyciu wtyczki Maven?

O ile mi wiadomo, nie ma nic, co mogłoby automatycznie przekształcić projekt Eclipse w projekt Maven (tj. Zmodyfikować układ, utworzyć POM, „wygenerować” i nakarmić go metadanymi, wykryć biblioteki i ich wersje, aby dodać je do POM itp.). Zaćmienie po prostu nie ma wystarczającej ilości metadanych, aby było to możliwe (jest to właśnie cel POM) i / lub aby uzyskać przyzwoity wynik.

A może powinienem utworzyć nowy projekt Maven i ręcznie skopiować wszystkie pliki źródłowe, biblioteki lib itp

Moim zdaniem byłaby to najlepsza opcja. Utwórz projekt Maven, skopiuj / przenieś źródła, zasoby, testy, przetestuj zasoby w odpowiednich katalogach, zadeklaruj zależności itp.

Pascal Thivent
źródło
Dlaczego ta odpowiedź jest wyższa niż odpowiedź +199? Prawie tego nie widziałem
Evorlor,
1

Konwersja na Gradle jest analogiczna do Maven:

Kliknij prawym przyciskiem myszy Projekt -> podmenu Konfiguruj -> Konwertuj na projekt Gradle (STS)

inne
źródło
4
Odpowiedź nie ma znaczenia dla pytania
Ripon Al Wasim,
1
Znalazłem to pytanie, szukając Gradle, wiele razy pomocne jest dodanie odpowiedzi dla innego systemu operacyjnego niż zadanego systemu operacyjnego, ponieważ nie istnieje pytanie dla konkretnego przypadku. Jeśli chodzi o Gradle, nie stworzyłbym nowego pytania, aby odpowiedzieć na to, co uważam za pomocne, raczej to publikuję. Dziękuję i pozdrawiam.
kolejne