Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

maven dependencies groovy

I'm running a project that has a dependency on groovy 1.7-beta-1. The gmaven plugin uses groovy version 1.6 as a dependency. In my pom, I specify in the dependency management section the grooyv-all version as :

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>1.7-beta-1</version>
        </dependency>
    </dependencies>
</dependencyManagement>

Yet when I run maven in debug mode I see that groovy 1.6 is being used for a dependency to the gmaven plugin. I thought my dependency management section would override this so they all use 1.7-beta-1, but I'm getting errors due to the different groovy versions. any help here would be appreciated.

thanks,

Jeff

like image 480
Jeff Storey Avatar asked Dec 09 '09 19:12

Jeff Storey


People also ask

Does Maven support Groovy?

The execution of the Groovy script can be bound to any Maven phase; furthermore, inside the script, the objects session and project can be used to interact with the Maven build. For instance, the project name can be logged with log.info "$project.name" .

Where is Groovy all jar?

Type groovy-all. Select the latest version. Click on "Browse" on the top-right. From here, you can copy the links to all jars and download that by clicking on it or using wget , curl or what have you.

What is Gmaven plugin?

Provides support for execution, compilation and other facets of Groovy development.


3 Answers

Here's a refined version of Pascal's answer. I upgraded the main plugin version to 1.2, the dependency to Groovy 1.7, and wrapped it all in a pluginManagement tag so that it will nicely leverage the inheritance model.

Keep in mind that the 1.3-SNAPSHOT of the GMaven plugin has already begun using the 1.7-rc2 Groovy provider.

<!-- I wrapped everything in a plugin management section so that this can be neatly inherited across all your poms -->
<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.codehaus.gmaven</groupId>
      <artifactId>gmaven-plugin</artifactId>
      <!-- Notice I upgraded it to 1.2 -->
      <!-- Details here http://repo1.maven.org/maven2/org/codehaus/gmaven/gmaven-plugin/1.2/gmaven-plugin-1.2.pom -->
      <version>1.2</version>
      <dependencies>
        <dependency>
          <groupId>org.codehaus.gmaven.runtime</groupId>
          <artifactId>gmaven-runtime-1.7</artifactId>
          <version>1.2</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</pluginManagement>
like image 198
Matthew McCullough Avatar answered Oct 11 '22 00:10

Matthew McCullough


Overriding a dependency used by a plugin is a nice ability that was actually introduced by Maven 2.0.9.

To do so, at least with a plugin that you are using as a normal build plugin - as opposed to a report which is not the case with the the gmaven-plugin so I won't cover this case here - simply add a dependency block inside the plugin block, like this (this is a sample so versions may be inaccurate):

<plugin>
  <groupId>org.codehaus.groovy.maven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <goals>
        <goal>generateStubs</goal>
        <goal>compile</goal>
        <goal>generateTestStubs</goal>
        <goal>testCompile</goal>
      </goals>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>1.7-beta-1</version>
    </dependency>
  </dependencies>
</plugin>

As long as the new version of the dependency is "API compatible" with the version the plugin was linked against, you should be ok. If not, then you'll obviously have to upgrade to a newer version of the plugin compatible with the new API (i.e. likely using it as dependency), which is what you did.

like image 43
Pascal Thivent Avatar answered Oct 10 '22 22:10

Pascal Thivent


To make gmaven accurately picks the right runtime is by configuring the "providerSelection" value, e.g.

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
             <configuration>
                 <providerSelection>1.7</providerSelection>
             </configuration>

FYI, for the groovy:providers mojo, these are the configurations it expects (I extracted them by debugging to org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(List, Stack, MavenSession, MavenProject) (look for XmlPlexusConfiguration):

<configuration>
 <remoteRepositories implementation="java.util.List">${project.pluginArtifactRepositories}</remoteRepositories>
 <project implementation="org.apache.maven.project.MavenProject">${project}</project>
 <artifactRepository implementation="org.apache.maven.artifact.repository.ArtifactRepository">${localRepository}</artifactRepository>
 <pluginArtifactMap implementation="java.util.Map">${plugin.artifactMap}</pluginArtifactMap>
 <providerSelection implementation="java.lang.String">${gmaven.runtime}</providerSelection>
</configuration>
like image 43
yclian Avatar answered Oct 10 '22 23:10

yclian