Maven dependency management for plugin dependencies

前端 未结 4 1590
天涯浪人
天涯浪人 2020-12-13 23:14

Recently, I came accross the following problem :

As I set up dependency management for my project, I had child-pom using plugin with dependencies, that I want to be

相关标签:
4条回答
  • 2020-12-13 23:57

    The other possibility is to import all the dependencies of the parent 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> 
    

    Not the most beautiful solution, but working :-)

    0 讨论(0)
  • 2020-12-14 00:00

    For a parent POM to control which plugin versions the child uses, you should declare the <plugin> in a <pluginManagement> section of the parent POM.

    You defined com.google.gwt:gwt-user as a <dependency> in the <dependencyManagement> section.

    I'm not sure if you are intending to use gwt-user as a plugin or as a dependency, but it should be listed as the same entity in both for inheritance to work.

    0 讨论(0)
  • 2020-12-14 00:13

    According to the following links, it seems not to be possible :

    • http://maven.40175.n5.nabble.com/dependency-management-within-plugin-dependencies-td78367.html
    • https://issues.apache.org/jira/browse/MNG-2496

    Here is a workaround I found, and I wanted to share with everyone, in case other people had the same problem :

    In my root pom, I have defined a property, a dependency management and a plugin management :

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

    And in my child pom, using the relationship provided by plugin management (see Maven2 - problem with pluginManagement and parent-child relationship), I just declare the plugin dependency :

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

    Now if I change the version in the properties, it is automatically impacting all direct dependencies and plugin dependencies.

    0 讨论(0)
  • 2020-12-14 00:13

    In my case I was using the jetty maven plugin, with a dependency on hsqldb. I copied some sample lines from the sonatype book (I think that's where I got the lines from) for using the jetty plugin, which specified the groupId as hsqldb. I am using version 2.3.2 of hsqldb. In my parent pom in the dependencyManagement section and my persistence module the groupId is org.hsqldb. Having mismatched groupIds was what was causing me to get an error, because under that old groupId there isn't a version 2.3.2. Once I changed the groupId from hsqldb to org.hsqldb everything started working.

    0 讨论(0)
提交回复
热议问题