Я - "один программист" полосы человека, и я наконец начал использовать управление версиями, когда я копировал целые приложения и поместить их в папку, названную "резервным копированием" и затем более поздним именованием их что-то как "с 20080122 резервным копированием". Я предполагаю, что много людей запускает этот путь. Таким образом, вопрос не состоит в том, необходимо ли использовать управление версиями, а скорее необходимо ли сделать это правильный путь, или необходимо ли взломать вместе некоторое half-assed самодельное факсимиле?
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>
Вам необходимо добавить аналогичную зависимость 1.7 к зависимостям подключаемого модуля в разделе
или
с аналогичной структурой. Добавляемый вами раздел управления зависимостями является правильным, но не влияет на зависимости плагинов. Я постараюсь просмотреть этот ответ и опубликовать пример позже, когда вернусь за свой рабочий стол.
Переопределение зависимости, используемой плагином, - хорошая возможность, которая была фактически введена в 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: provider 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>