Maven зависимости Groovy
Я управляю проектом, который зависит от groovy 1.7-beta-1. Плагин gmaven использует отличную версию 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-бета-1, но я получаю ошибки из-за разных версий groovy. любая помощь здесь будет оценена.
Спасибо,
Джефф
4 ответа
Вот уточненная версия ответа Паскаля. Я обновил версию основного плагина до 1.2, зависимость от Groovy 1.7, и обернул все это в тег pluginManagement, чтобы он мог эффективно использовать модель наследования.
Имейте в виду, что 1.3-SNAPSHOT плагина GMaven уже начал использовать провайдера 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>
Переопределение зависимости, используемой плагином, - хорошая возможность, которая была фактически введена в 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 (то есть, скорее всего, используя его в качестве зависимости), что вы и сделали.
Чтобы 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>
Вам необходимо добавить аналогичную зависимость 1.7 к зависимостям плагина в аналогично структурированной <plugin>
или же <pluginManagement>
раздел. Ваш раздел управления зависимостями, который вы добавляете, корректен, но не влияет на зависимости плагина. Я постараюсь просмотреть этот ответ и опубликовать пример позже, когда вернусь за свой стол.