web-dev-qa-db-fra.com

Gestion des dépendances Maven pour les dépendances des plugins

Récemment, je suis tombé sur le problème suivant:

Comme j'ai mis en place la gestion des dépendances pour mon projet, j'ai eu child-pom utilisant un plugin avec des dépendances, que je veux synchroniser avec les dépendances déclarées dans ma gestion des dépendances.

Dans un pom racine, j'ai déclaré dans ma gestion des dépendances:

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

Et dans le pom enfant, j'ai un plugin qui a besoin de 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>

Cependant, si je supprime la version de dépendance utilisée dans gwt-maven-plugin, la compilation échoue.

Existe-t-il un autre moyen d'y parvenir?

PS: Il y a un article connexe Choisir la version des dépendances dans maven et le plugin maven qui ne répond pas à ma question

43
JBE

Selon les liens suivants, cela ne semble pas possible:

Voici une solution de contournement que j'ai trouvée et que je voulais partager avec tout le monde, au cas où d'autres personnes auraient le même problème:

Dans mon pom racine, j'ai défini une propriété, une gestion des dépendances et une gestion des plugins:

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

Et dans mon pom enfant, en utilisant la relation fournie par la gestion des plugins (voir Maven2 - problème avec la gestion des plugins et la relation parent-enfant ), je déclare simplement la dépendance du plugin:

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

Maintenant, si je change la version dans les propriétés, cela affecte automatiquement toutes les dépendances directes et les dépendances des plugins.

49
JBE

Pour qu'un POM parent contrôle les versions de plugin utilisées par l'enfant, vous devez déclarer le <plugin> dans un <pluginManagement> section du POM parent.

Vous avez défini com.google.gwt:gwt-user comme un <dependency> dans le <dependencyManagement> section.

Je ne sais pas si vous avez l'intention d'utiliser gwt-user en tant que plugin ou dépendance, mais il doit être répertorié comme la même entité dans les deux pour que l'héritage fonctionne.

4
matt b

L'autre possibilité est d'importer toutes les dépendances du POM parent:

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

Pas la plus belle solution, mais ça marche :-)

2
kavai77

Dans mon cas, j'utilisais le plugin jetty maven, avec une dépendance à hsqldb. J'ai copié quelques exemples de lignes du livre de sonatype (je pense que c'est de là que je tire les lignes) pour utiliser le plugin jetty, qui spécifiait le groupId comme hsqldb. J'utilise la version 2.3.2 de hsqldb. Dans mon pom parent dans la section dependencyManagement et mon module de persistance, le groupId est org.hsqldb. La non-concordance de groupIds était ce qui me faisait obtenir une erreur, car sous cet ancien groupId, il n'y a pas de version 2.3.2. Une fois que j'ai changé le groupId de hsqldb en org.hsqldb, tout a commencé à fonctionner.

0
lumpynose