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 をデバッグ モードで実行すると、gmaven プラグインへの依存関係に groovy 1.6 が使用されていることがわかります。私の依存関係管理セクションはこれをオーバーライドするので、すべて 1.7-beta-1 を使用すると思っていましたが、グルーヴィーなバージョンが異なるためにエラーが発生しています。ここで何か助けていただければ幸いです。

ありがとう、

ジェフ

4

4 に答える 4

7

これがPascalの答えの洗練されたバージョンです。メインのプラグインバージョンを1.2にアップグレードし、依存関係をGroovy 1.7にアップグレードし、継承モデルをうまく活用できるように、すべてをpluginManagementタグでラップしました。

GMavenプラグインの1.3-SNAPSHOTは、1.7-rc2Groovyプロバイダーの使用をすでに開始していることに注意してください。

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

プラグインによって使用される依存関係をオーバーライドすることは、Maven2.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>同様の構造のor<pluginManagement>セクションで、プラグインの依存関係に同様の 1.7 依存関係を追加する必要があります。追加する依存関係管理セクションは適切ですが、プラグインの依存関係には影響しません。この返信を確認して、後でデスクに戻ったときに例を投稿しようと思います。

于 2009-12-09T21:15:32.480 に答える