Jak pogodzić maven’a z maven’em? (m2e vs maven-eclipse-plugin)

W projektach opartych o Maven‚a często do integracji ze środowiskiem Eclipse używany jest plugin maven-eclipse-plugin. Za pomocą tego pluginu spod konsoli można wygenerować wszystkie niezbędne pliki projektu wymagane przez IDE. Z drugiej strony Eclipse musi zostać wyposażony w plugin do integracji z Maven’em, dzięki czemu będzie poprawnie rozpoznawał zależności, zapewni graficzne wsparcie edycji plików *.pom i dołoży klika innych przydatnych rzeczy. Wybór nie jest tu duży i zazwyczaj pada na wtyczkę m2eclipse (oprócz tego dostępny jest jeszcze Eclipse IAM).

Załóżmy więc, że wygenerowaliśmy pliki projektu za pomocą polecenia mvn eclipse:eclipse. Jeśli spróbujemy zaimportować taki projekt w IDE, z pewnością zauważymy, że m2eclipse nie jest w stanie poprawnie rozpoznawać zależności projektu. Gdy podejrzymy w edytorze tekstu plik .project, zobaczymy tam komentarz, który jednoznacznie wskazuje na problem:

NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.

Jak zatem przerobić taki projekt, aby był poprawnie rozpoznawany przez m2eclipse? Wystarczy kilka drobnych zmian w plikach .project i .classpath.

.project

Najpierw zajmiemy się głównym plikiem konfiguracyjnym projektu eclipsowego. Do sekcji buildSpec dodamy element umożliwiający wtyczce m2eclipse budowanie projektu:

<buildcommand>
  <name>org.eclipse.m2e.core.maven2Builder</name>
</buildcommand>

Następnie do sekcji natures dołożymy element informujący środowisko IDE o tym, że projekt jest zarządzany przez wtyczkę m2eclipse.

<nature>org.eclipse.m2e.core.maven2Nature</nature>

Zanim zakończymy edycję pliku, warto zwrócić uwagę na wygenerowane przez maven-eclipse-plugin wpisy w sekcji buildSpec i natures. Prawie na pewno znajdziemy tam kilka niepotrzebnych wpisów. Np. dla projektu GWT wystarczą na ogół tylko trzy poniższe natury projektu, a całej reszty można się pozbyć.

<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>com.google.gwt.eclipse.core.gwtNature</nature>

.classpath

Otwieramy teraz plik przechowujący informacje o zależnościach projektu. Tam wyrzucany wszystkie elementy classpathentry, które są rodzaju var (atrybut kind) i które mają w ścieżce (atrybut path) wyrażenie M2_REPO. Zamiast tego dokładamy nową linijkę wskazującą na kontener zależności maven’owych.

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>

Teraz wystarczy tylko zaimportować taki projekt w Eclipse używając opcji Existing Maven Projects, bądź odświeżyć projekt, jeśli już jest zaimportowany. Projekt powinien być teraz poprawnie rozpoznany przez wtyczke m2eclipse.

Skomentuj

2 Komentarze.

  1. Dzięki za pomoc. Czy w kodzie na pewno nie ma błędu?

Skomentuj


UWAGA - Możesz używać HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CommentLuv badge