2012-05-02 38 views
6

Mam artefakt wojenny i potrzebuję użyć niektórych jego klas ze słoika. nie mogę przenieść zajęcia do innego projektu, a następnie wdrożyć klas i zasobów zawartych w mojej webapp jako „załączone” artefakt używając następującej konfiguracji:Błąd zależności Mavena w Eclipse

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
     <attachClasses>true</attachClasses> 
    </configuration> 
</plugin> 

Spowoduje to dwa artefakty rozmieszczone: mywebapp-1.0-SNAPSHOT.war i mywebapp-1.0-SNAPSHOT-classes.jar.

Aby skorzystać z tych klas I odnosząc się do artefaktu następująco:

<dependency> 
     <groupId>mygroup</groupId> 
     <artifactId>mywebapp</artifactId> 
     <version>${project.version}</version> 
     <classifier>classes</classifier> 
    </dependency> 

Kiedy skompilowany z Jenkins wszystko działa poprawnie, ale kiedy uruchomić testy lokalnie z Eclipse nie może znaleźć zajęcia referencyjnych. (java.lang.NoClassDefFoundError)

Myślę, że to może być błąd w wtyczce maven eclipse, ktoś ma jakiś pomysł, który może się wydarzyć?

Odpowiedz

4

Moja prosta odpowiedź jest następujący link do systemu śledzenia błędów Eclipse:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=365419

Zobacz odpowiedź wewnątrz.

Tak, to jest problem z samą Eclipse ..

Rozwiązanie wewnątrz Eclipse wystarczy dodać projekt ręcznie w obszarze roboczym na odpowiedni projekt, gdzie trzeba klas z projektu wojennego.

+0

Poza irytujące konieczności ręcznego Fiddle konfigurację projektu Dodatkową wadą jest to, że zajęcia i zasoby z projektów zależnych skrada się do wyników wyszukiwania, więc zamiast otwierania źródła odwołania klasy często kończy się w brudny widoku plików klasa lub wersji zdemontowanego własnej klasy masz doskonale dostępne źródła :( Uwaga: klasy dostają się do wyników, mimo że są poprawnie oznaczone jako "pochodne", wyglądają jak błąd dla mnie, zweryfikowane na Eclipse Mars SR 1. – Espinosa

5

Obejście jest opisany na http://wiki.eclipse.org/M2E-WTP_FAQ:

Rozwiązaniem istnieje jednak musimy zmienić zależność czy projekt jest zbudowany w Eclipse czy nie. W projekcie zależnej, można skonfigurować następujące elementy:

<dependencies> 
... 
<dependency> 
    <groupId>com.company</groupId> 
    <artifactId>mywebapp</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <classifier>${webClassifier}</classifier> 
</dependency> 
... 
</dependencies> 
... 
<properties> 
... 
<webClassifier>classes</webClassifier> 
</properties> 
... 
<profiles> 
<profile> 
    <id>m2e</id> 
    <activation> 
    <property> 
     <name>m2e.version</name> 
    </property> 
    </activation> 
    <properties> 
    <webClassifier></webClassifier> 
    </properties> 
</profile> 
</profiles> 

Profil m2e uaktywnia się automatycznie, gdy projekt jest zbudowany z m2e, ignorowane w innych okolicznościach. W takim przypadku projekt zależny użyje pustego klasyfikatora, aby odwołać się do projektu WWW, który zostanie dodany do ścieżki klas zgodnie z oczekiwaniami.

+1

Mogę potwierdzić, że rozwiązuje problem z Rozdzielczość obszaru roboczego dla zależności z klasyfikatorem, zwykle projekty wojenne z attachClasses = true. Jednak wadą jest to, że teraz wersje między referencją zależności i projektem referencyjnym * muszą idealnie pasować *, w przeciwnym razie jest ona zgłaszana jako zepsuta zależność dency. W praktyce oznacza to dużo więcej checktouts git. – Espinosa

Powiązane problemy