2012-06-28 22 views
32

Recientemente, me encontré con el siguiente problema:Maven gestión de la dependencia de las dependencias de plugins

Como configuro gestión de la dependencia para mi proyecto, tuve niño-pom usando el plugin con dependencias, que quiero estar sincronizado con dependencias declarado en mi gestión de dependencia.

En un pom raíz, lo declarado en mi gestión de la dependencia:

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

Y en el pom niños, tengo un plugin que necesita GWT-usuario:

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

Sin embargo, si elimine la versión de dependencia utilizada en gwt-maven-plugin, la compilación falla.

¿Hay alguna otra manera de conseguirlo?

PS: Hay un post relacionado Choosing dependency version in maven and maven plugin que no responde a mi pregunta

Respuesta

36

acuerdo con los siguientes enlaces, que no parece ser posible:

Aquí es una solución que he encontrado, y yo quería compartir con todo el mundo, en caso otras personas tuvieron el mismo problema:

En mi raíz pom, he definido una propiedad, una gestión de la dependencia y un complemento agement:

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

Y en mi pom del niño, utilizando la relación proporcionada por plugin de gestión (ver Maven2 - problem with pluginManagement and parent-child relationship), acabo de declarar la dependencia plugin:

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

Ahora si cambio de la versión en las propiedades , está afectando automáticamente a todas las dependencias directas y dependencias de complementos.

+0

En mi humilde opinión, si la dependencia solo es necesaria en el complemento, no hay uso para la sección de gestión de dependencias –

+3

para futura referencia. pluginManagement está bajo la etiqueta de compilación – TecHunter

4

Para un POM padres para controlar qué versiones plugin utiliza el niño, debe declarar la <plugin> en una sección <pluginManagement> del padre POM.

Usted definió com.google.gwt:gwt-user como <dependency> en la sección <dependencyManagement>.

No estoy seguro de si tiene la intención de usar gwt-user como un complemento o como una dependencia, pero debe aparecer como la misma entidad en ambos para que funcione la herencia.

+0

gwt-user se utiliza como un complemento que tiene dependencias. OP está tratando de obtener la versión definida para ambos en una sola ubicación. – eis

1

La otra posibilidad es la importación de todas las dependencias de la matriz POM:

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

No es la solución más bella, pero trabajando :-)

0

En mi caso, yo estaba usando el plugin embarcadero experto , con una dependencia en hsqldb. Copié algunas líneas de muestra del libro sonatype (creo que de allí obtuve las líneas) para usar el plugin jetty, que especificaba groupId como hsqldb.Estoy usando la versión 2.3.2 de hsqldb. En mi pom padre en la sección de gestión de dependencia y en mi módulo de persistencia, groupId es org.hsqldb. No coincidir con groupIds fue lo que me estaba causando un error, porque en ese viejo ID de grupo no hay una versión 2.3.2. Una vez que cambié groupD de hsqldb a org.hsqldb, todo comenzó a funcionar.

Cuestiones relacionadas