문제

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> 부분. 추가하는 종속성 관리 섹션은 적절하지만 플러그인 종속성에는 영향을 미치지 않습니다. 이 답장을 검토하고 나중에 책상으로 돌아 왔을 때 예를 게시하려고합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top