2012-06-28 16 views
32

Niedawno przyjechałem po drugiej stronie następujący problem:Maven zarządzanie zależność dla zależnościami wtyczki

Jak skonfigurować zarządzanie zależnościach dla mojego projektu, miałem dziecko-pom za pomocą wtyczki z zależnościami, że chcę być zsynchronizowane z zależnościami zadeklarowane w moim zarządzaniu zależnościami.

W pom korzeniowego, oświadczyłem moim zarządzania zależność:

<dependencyManagement> 
    <dependencies> 
     ... 
     <dependency> 
      <groupId>com.google.gwt</groupId> 
      <artifactId>gwt-user</artifactId> 
      <version>2.4.0</version> 
     </dependency> 
     ... 
    <dependencies> 
<dependencyManagement> 

A w pom dzieci, mam plugin który potrzebuje GWT-user:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>gwt-maven-plugin</artifactId> 
    <version>2.4.0</version> 
    <dependencies> 
     <dependency> 
      <groupId>com.google.gwt</groupId> 
      <artifactId>gwt-user</artifactId> 
      <version>2.4.0</version> 
     </dependency> 
      ... 
     </dependencies> 
    ... 
</plugin> 

Jednak gdybym usuń wersję zależności używaną w gwt-maven-plugin, kompilacja się nie powiedzie.

Czy istnieje inny sposób, aby to osiągnąć?

PS: Jest to związane po Choosing dependency version in maven and maven plugin które nie odpowiedziałeś na moje pytanie

Odpowiedz

36

Zgodnie z poniższych linków, wydaje się nie być możliwe:

Oto obejście znalazłem i chciałem podzielić się ze wszystkimi, w Sprawa, w której inni ludzie mieli ten sam problem:

W moim głównym pom, zdefiniowałem właściwość, zarządzanie zależnościami i wtyczkę dzania:

<properties> 
    <gwtVersion>2.4.0</gwtVersion> 
    <gwtMavenPluginVersion>2.4.0</gwtMavenPluginVersion> 
</properties> 

<dependencyManagement> 
    <dependencies> 
    ... 
    <dependency> 
     <groupId>com.google.gwt</groupId> 
     <artifactId>gwt-user</artifactId> 
     <version>${gwtVersion}</version> 
    </dependency> 
    ... 
    <dependencies> 
<dependencyManagement> 

<build>  
    <pluginManagement> 
     <plugins> 
      <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>gwt-maven-plugin</artifactId> 
      <version>${gwtMavenPluginVersion}</version> 
      <dependencies> 
       <dependency> 
        <groupId>com.google.gwt</groupId> 
        <artifactId>gwt-user</artifactId> 
        <version>${gwtVersion}</version> 
       </dependency> 
       ... 
      </dependencies> 
      ... 
     </plugins> 
    ... 
    </pluginManagement> 
</build> 

A moje dziecko pom, wykorzystując zależność dostarczone przez wtyczkę zarządzającą (patrz Maven2 - problem with pluginManagement and parent-child relationship), po prostu zadeklarować zależność plugin:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>gwt-maven-plugin</artifactId> 
</plugin> 

Teraz, jeśli mogę zmienić wersję we właściwościach , automatycznie wpływa na wszystkie bezpośrednie zależności i zależności wtyczek.

+0

IMHO, jeśli zależność jest wymagana tylko w wtyczce, nie ma zastosowania dla sekcji dependencyManagement –

+3

dla futur reference. pluginManagement jest pod tagiem budowania – TecHunter

4

Dla POM nadrzędnej kontroli, które wersje wtyczki wykorzystuje dziecko, należy zadeklarować <plugin> w <pluginManagement> sekcji rodzica POM.

Zdefiniowałeś com.google.gwt:gwt-user jako <dependency> w sekcji <dependencyManagement>.

Nie jestem pewien, czy zamierzasz używać gwt-user jako wtyczki lub jako zależności, ale powinna być wymieniona jako ta sama jednostka w obu dla dziedziczenia do pracy.

+0

gwt-użytkownik jest używany jako wtyczka, która ma zależności. OP próbuje uzyskać wersję zdefiniowaną dla obu w tylko jednej lokalizacji. – eis

1

Inną możliwością jest, aby zaimportować wszystkie zależności POM dominującej:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>gwt-maven-plugin</artifactId> 
    <version>2.4.0</version> 
    <dependencies> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>${project.artifactId}</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
      ... 
     </dependencies> 
    ... 
</plugin> 

Nie najpiękniejszy rozwiązanie, ale działa :-)

0

w moim przypadku byłem za pomocą wtyczki pomost maven , z zależnością od hsqldb. Skopiowałem kilka przykładowych linii z książki sonatype (myślę, że tam właśnie dostałem linie) do korzystania z wtyczki jetty, która określiła id grupy jako hsqldb.Używam wersji 2.3.2 hsqldb. W mojej nadrzędnej pom w sekcji dependencyManagement i moim module persistent groupId to org.hsqldb. Posiadanie niedopasowanych identyfikatorów grupowych było przyczyną tego, że wystąpił błąd, ponieważ pod tym starym identyfikatorem grupy nie ma wersji 2.3.2. Po zmianie identyfikatora groupId z hsqldb na org.hsqldb wszystko zaczęło działać.

Powiązane problemy