2011-11-24 10 views
44

Mam kilka projektów Maven, z których każdy ma pewną wspólną funkcjonalność lub przynajmniej typową konfigurację/zależności. Wyodrębniłem to do wspólnego pom.xml, a następnie modularyzowałem kilka aspektów, na przykład trwałość, zależności zależne od Spring i tak dalej - wszystkie w swoich modułach, które dziedziczą po tym macierzystym POM.M2E: Wersja jest duplikatem wersji nadrzędnej - Dlaczego jest to ostrzeżenie?

W tej chwili "Common" to wersja 1.0.0, a ja mam "ProjectA", który chcę z niego odziedziczyć. Otrzymuję ostrzeżenie:

wersja jest duplikatem dominującej wersji

nie w pełni zrozumieć, dlaczego jest to ostrzeżenie. Myślałem, że mam opcję pominięcia wersji z mojego projektu POM, aby odziedziczyć wersję. (Robię to dla zwykłych modułów - na przykład, common-spring dodaje dodatkowe wspólne zależności dla aplikacji Spring, a faktycznie ProjectA faktycznie dziedziczy po common-spring.)

Czy to nie tylko to - opcja? Jeśli zmienię wersję ProjectA na 1.0.1 lub 2.0.0, wszystko jest w porządku.

+0

Na co warto, jestem ostrożny, aby tylko dziedziczyć od POMs i I zależą od JARs. Deklaruję właściwość common.version, która jest używana w module dependencyManagement, aby ProjectA mógł odziedziczyć po common-spring (który dziedziczy po wspólnym) i zależy od common-io (który również dziedziczy po wspólnym) i wszystkie są tą samą wersją. –

+0

Czy to jest właśnie to ostrzeżenie wydane przez m2eclipse lub Maven? (Możesz sprawdzić wiersz polecenia za pomocą 'mvn verify' - prawdopodobnie - jeśli Maven emituje coś takiego lub nie). Poza tym byłoby to pomocne, gdybyś mógł opublikować wspomniane pliki' pom.xml'. Trudno jest sobie wyobrazić, co dzieje się w twojej konfiguracji. –

+0

To sprawiedliwe. Zrobię to w środę, ponieważ jestem na wakacjach (nie ma czegoś takiego jak wakacje z SO!). Jestem prawie pewien, że jest to ostrzeżenie m2e. –

Odpowiedz

51

Jest to zaledwie m2e, starając się być sprytnym, ponieważ element wersji (jak identyfikator grupy) czasami może być nadmiarowy i może być dziedziczony z macierzystego POM, więc można bezpiecznie usunąć ten element z twojego POM dziecka.

Czasami nie jest to jednak nadmiarowa informacja, np. Gdy projekt nadrzędny i podrzędny mają różne cykle życia, a m2e powinno zezwolić na wyłączenie tego ostrzeżenia. Niestety, nie ma sposobu, aby to zrobić jeszcze: http://dev.eclipse.org/mhonarc/lists/m2e-users/msg01961.html

UPDATE: Jak mówi Duncan poniżej, w nowszych wersjach można wyłączyć to ostrzeżenie.

2

Jeśli to naprawdę denerwuje cię wykorzystywać obiekt do wyciszyć ostrzeżenia z jakiegoś przebiegłego kuglarstwo:

<version>${api.version}</version> 
<properties> 
    <api.version>0.0.1-SNAPSHOT</api.version> 
</properties> 

ale musisz być naprawdę robi to poruszająca ostrzeżenie do wyjścia konsoli:

[WARNING] Some problems were encountered while building the effective model for [project] 
[WARNING] 'version' contains an expression but should be a constant. 
52

Nowsze wersje m2e (od wersji 1.1) umożliwiają teraz wyłączenie tego ostrzeżenia.

Preferencje> Maven> Ostrzeżenia> Wyłącz „wersja jest kopią wersji dominującej” ostrzeżenie

Oryginalny raport o błędzie: https://bugs.eclipse.org/bugs/show_bug.cgi?id=356796

+2

+1 możesz zaznaczyć w preferencjach, ale musisz wykonać Project> Maven> Zaktualizuj projekt ... aby je usunąć – slf

+0

@slf W najnowszych wersjach Eclipse, zaraz po zmianie Ustawienia Maven ** Errors/Warnings ** w preferencjach i kliknij "Zastosuj", pojawi się okno z ofertą aktualizacji projektów. – informatik01