2012-09-25 11 views
13

Używam Apache Maven do zarządzania moimi bibliotekami Java (jar) i niektórymi projektami, które używają bibliotek. Dla wygody używam mvn eclipse:eclipse do generowania plików projektu Eclipse, które można zaimportować do przestrzeni roboczej Eclipse w celu edycji.Jak przekazać Mavenowi, aby uwzględnił zależność słoika, a nie katalog źródłowy podprojektu w Eclipse?

Problemy pojawiają się, gdy edytuję projekty główne i projekty Java w tym samym obszarze roboczym Eclipse. Oznacza to, że mvn eclipse:eclipse zawiera zależność ścieżki src w pliku .classpath, a nie zależność jar zgodnie z oczekiwaniami.

Powiedz, że mam projekt Jave lib o nazwie mylib. Odpowiedni plik JAR mylib.jar został wdrożony w prywatnym repozytorium Maven prowadzonym przeze mnie. Aby użyć pliku mylib.jar w głównym projekcie, następująca zależność jest zawarta w pom.xml.

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

mvn compile i mvn test dzieło doskonałe, w którym mylib.jar zostanie pobrana automatycznie z mojego repo. Jednak próbując mvn eclipse:eclipse, znajduję wygenerowany plik .classpath nie obejmuje zależność mylib.jar zgodnie z oczekiwaniami. Zamiast tego zawiera katalog plików źródłowych dla mylib w następujący sposób.

<!-- .classpath file generated by mvn eclipse:eclipse --> 
<classpathentry kind="src" path="/mylib"/> 

Wydaje się, że odczytuje metadane Maven Eclipse i znajdzie myLib oraz główne coexits projekt w tym samym obszarze roboczym. Dlatego maven zawiera źródło mojego dobra. Cholerny. Jak mogę powiedzieć mavenowi, aby zignorował lokalne źródło projektu i po prostu umieścił plik jar?

+0

Dlaczego don” t zamiast tego używasz wtyczki m2e Eclipse? –

+1

Ponieważ wygodnie jest pisać polecenia w konsoli - kompilacja, testowanie, pakowanie odbywa się za pomocą jednego polecenia. Poza tym użyteczne segmenty konfiguracji w pom.xml można łatwo ponownie wykorzystać w innych projektach. Eclipse jest dobry, ale zbyt wiele menu i liczne wtyczki wyglądają na skomplikowane. –

+0

Te dwa elementy niekoniecznie wzajemnie się wykluczają, nawet jeśli musiałbyś zrezygnować z wtyczki Maven Eclipse, aby użyć m2e. Uważam, że Eclipse jest wygodny do debugowania, a m2e gwarantuje, że proces budowania jest tak podobny, jak to tylko możliwe w Eclipse i poza nim. –

Odpowiedz

12

Uważam, że tak jest, ponieważ są to projekty powiązane w Eclipse. Jeśli więc klikniesz prawym przyciskiem myszy na główny projekt i przejdziesz do Project References, twój projekt lib powinien zostać zaznaczony.

Po uruchomieniu mvn eclipse:eclipse automatycznie doda odniesienia do projektów dla wszystkich podprojektów (modułów). Możesz to zmienić za pomocą właściwości useProjectReferences wtyczki maven eclipse.

Domyślnie jest true, ale

Kiedy ustawiony na false, wtyczka nie stworzy podprojektów i zamiast odniesienia te podprojekty z użyciem zainstalowanego pakietu na miejscowym repozytorium

Aby użyć nieruchomości, ustaw nieruchomość w swoim pom.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> 

Albo jako właściwość w linii poleceń:

mvn eclipse:eclipse -Declipse.useProjectReferences=false 
0

Eclipse musi znać ścieżkę do lokalnego repozytorium maven. Dlatego należy ustawić zmienną ścieżki klasy M2_REPO. Wykonać następujące polecenie:

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

Można również zdefiniować nowy ścieżce klasy zmiennej wewnątrz Eclipse: Z paska menu wybierz Window > Preferences. Select the Java > Build Path > Classpath Variables page.

Następnie budowania projektu poprzez wykonanie mvn eclipse:eclipse

nadzieję, że pomoże!

0

Dzięki za podpowiedzi Hound Dog w. Tak, useProjectReferences kontroluje Mavena, jak obsługiwać projekty podrzędne - w tym katalog źródłowy lub pliki jar.

Nie zainstalowałem wtyczki maven dla Eclipse, więc dodam następującą konfigurację w pom.xml. Informuje Mavena o włączeniu zależności słoika w lokalnym repozytorium maven, a nie w źródłowym reż. Jeśli wymagany plik jar nie jest obecny w lokalnym repo, zostanie on automatycznie pobrany w locie.

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

Teraz mvn eclipse:eclipse działa zgodnie z oczekiwaniami.

+0

Zaktualizowałem moją odpowiedź, aby to odzwierciedlić, a także alternatywę linii poleceń. Jeśli jesteś z tego zadowolony, nie zapomnij wybrać go jako właściwej odpowiedzi :) –

0

Spróbuj za pomocą elementu typu zależność wewnątrz znacznika i wymienić źródło/JAR jako typ w pom.xml

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

To nie działa. – Marcin

0

Niedawno doświadczył, że takie zachowanie jest wyzwalany przez wersję podaną w plikach pom.xml. Jeśli wersja biblioteki, której projekt podstawowy jest zależny, jest dostępna dla zaćmienia w obszarze roboczym (np. Projekt z pasującą do niego pom.xml [grupa, artefakt, wersja] dla biblioteki), to będzie używany jako odniesienie do projektu zamiast bycia wyciągniętym z lokalizacji M2REPO.

Moje rozwiązanie polegało na zmianie wersji biblioteki pom.xml w obszarze roboczym na inną wersję, co pozwoliło mi ulepszyć bibliotekę, podczas gdy główny projekt wciąż wyciągnął starszą bibliotekę z M2REPO.

Użycie tego poprzez wyrównanie numerów wersji pozwala na jednoczesne ulepszenia/modyfikacje artefaktów przy niewielkim wysiłku.

Nie przetestowałem jeszcze, czy musisz uruchomić mvn eclipse:eclipse za każdym razem, gdy zmieniasz pliki lib pom.xml i podstawowe zależności pom.xml, ale oczekiwałbym, że tak będzie.

9

Muszę unikać dołączania zależności jako wznawianego projektu, ale jako słoik. Używanie Eclipse 4.6 Neon żadne z poprzednich rozwiązań nie działa.

musiałem wyłączyć Workspace Resolution funkcję

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

Dzięki! Uratowałem mój dzień! –

+0

Dziękujemy! To zadziałało dla mnie. –

0

próbowałem zamknięcia projektu w Eclipse & obszarze roboczym po prostu zbudowany sama, tym razem biorąc słoik z repozytorium zamiast łączyć projekt

Powiązane problemy