Maven 의존성 Groovy
-
18-09-2019 - |
문제
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을 사용하지만 다른 그루비 버전으로 인해 오류가 발생합니다. 여기서 도움을 주시면 감사하겠습니다.
감사해요,
제프
해결책
다음은 Pascal의 대답의 세련된 버전입니다. 메인 플러그인 버전을 1.2로 업그레이드 한 Groovy 1.7의 종속성을 1.2로 업그레이드하고 플러그인 관리 태그로 모든 것을 포장하여 상속 모델을 잘 활용할 수 있도록했습니다.
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>
다른 팁
플러그인에서 사용하는 종속성을 무시하는 것은 실제로 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 호환"이라면 괜찮을 것입니다. 그렇지 않다면, 새로운 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>
부분. 추가하는 종속성 관리 섹션은 적절하지만 플러그인 종속성에는 영향을 미치지 않습니다. 이 답장을 검토하고 나중에 책상으로 돌아 왔을 때 예를 게시하려고합니다.