6

我正在运行一个依赖 groovy 1.7-beta-1 的项目。gmaven 插件使用 groovy 1.6 版作为依赖项。在我的 pom 中,我在依赖管理部分将 grooyv-all 版本指定为:

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

然而,当我在调试模式下运行 maven 时,我看到 groovy 1.6 被用于对 gmaven 插件的依赖。我认为我的依赖管理部分会覆盖它,所以它们都使用 1.7-beta-1,但是由于不同的 groovy 版本,我遇到了错误。这里的任何帮助将不胜感激。

谢谢,

杰夫

4

4 回答 4

7

这是帕斯卡答案的精炼版本。我将主插件版本升级到 1.2,将依赖项升级到 Groovy 1.7,并将其全部包装在一个 pluginManagement 标记中,以便它可以很好地利用继承模型。

请记住,GMaven 插件的 1.3-SNAPSHOT 已经开始使用 1.7-rc2 Groovy 提供程序。

<!-- 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>
于 2009-12-11T17:16:49.710 回答
2

覆盖插件使用的依赖项是 Maven 2.0.9 实际上引入的一项不错的功能。

为此,至少使用您用作普通构建插件的插件 - 而不是报告的情况,gmaven-plugin所以我不会在这里介绍这种情况 - 只需在插件内添加一个依赖块块,像这样(这是一个示例,因此版本可能不准确):

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

只要依赖项的新版本与插件链接的版本“API 兼容”,就可以了。如果没有,那么您显然必须升级到与新 API 兼容的插件的较新版本(即可能将其用作依赖项),这就是您所做的。

于 2009-12-10T11:09:10.047 回答
1

要使 gmaven 准确地选择正确的运行时是通过配置“providerSelection”值,例如

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

仅供参考,对于groovy:providers mojo,这些是它所期望的配置(我通过调试将它们提取到org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(List, Stack, MavenSession, MavenProject)(查找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>
于 2010-02-25T10:29:09.640 回答
0

<plugin>您需要在类似结构或部分的插件依赖项中添加类似的 1.7 依赖项<pluginManagement>。您添加的依赖项管理部分是正确的,但不会影响插件依赖项。当我回到我的办公桌时,我将尝试查看此回复并发布一个示例。

于 2009-12-09T21:15:32.480 回答