2013-11-01 2 views
2

이 질문은 Conflicting versions of datanucleus enhancer in a maven google app engine project과 관련 있습니다. 나는 거기에 해결책을 시도하고 그것은 작동합니다. 하지만 mvn clean 컴파일을 실행하면 오류가 발생합니다.Datanucleus enhancer의 충돌 의존성 - 파트 2

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project XXX: Fatal error compiling: java.lang.NoClassDefFoundError: org/datanucleus/util/AnnotationProcessorUtils: org.datanucleus.util.AnnotationProcessorUtils. 

이유가 무엇입니까? datanucleus-maven-plugin : 3.3.0-release를 사용하고 있습니다.

문제점은 datanucleus-core가 두 번 있습니다. 하나는 프로젝트 종속성이고 다른 하나는 플러그인 종속성입니다. MVN의 datanuleus를 실행 한 후 콘솔에서 다음 줄을 향상 두 번 나타납니다

[INFO] CP: /home/user/.m2/repository/org/datanucleus/datanucleus-core/3.2.7/datanucleus-cor‌​e-3.2.7.jar 
+0

해당 솔루션 확인 (제외 사용) http://stackoverflow.com/a/4226979/663012 – Czar

+0

이 방법은 작동하지 않습니다. –

답변

4

마지막으로이 문제를 해결할 수있는 방법을 발견했습니다. 가장 우아한 해결책은 아니지만 다른 것이 있다고 생각하지 않습니다.

해결 방법은 compile 범위를 유의하시기 바랍니다 (컴파일러 플러그인에 datanucleus 코어 종속성을 추가하는 것이 었습니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.datanucleus</groupId> 
      <artifactId>datanucleus-core</artifactId> 
      <version>3.2.8</version> 
      <scope>compile</scope> 
     </dependency> 
    </dependencies> 
    ... 
</plugin> 

datanucleus 코어 의존성이 runtime 범위

<dependency> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>datanucleus-core</artifactId> 
    <version>3.2.8</version> 
    <scope>runtime</scope> 
</dependency> 

로 추가 datanucleus enhancer 플러그인의 datanucleus 코어 기본 버전은 3.2.8으로 바뀝니다.

<plugin> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>datanucleus-maven-plugin</artifactId> 
    <version>3.3.0-release</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.datanucleus</groupId> 
      <artifactId>datanucleus-core</artifactId> 
      <version>3.2.8</version> 
     </dependency> 
    </dependencies> 
</plugin> 

버전 3.2.9에서도 작동합니다.

0

런타임에 datanucleus 코어를 설정하면 당신이 (스레드에서 사용자가 필요로했던) 컴파일을 위해 그것을 필요로하지 않는 것을 의미합니다. 분명히 (DataNucleus) 주석 처리기 (사전 컴파일)를 실행하여 컴파일 할 수 있도록해야하므로 datanucleus-maven-plugin에서 사용하는 datanucleus-core 버전을 대신 설정해야합니다 (플러그인 종속성에 따라) 따라서 전체 pom.xml에서 사용되는 것과 일치합니다.

+0

종속성 및 플러그인 종속성에 동일한 버전이 있습니다. 문제는 내가 datanucleus-core를 두 번 가지는 것입니다 : 하나는 프로젝트 종속성에서, 다른 하나는 플러그인 종속성에서입니다. 'mvn datanuleus : enhance'를 실행 한 후 콘솔에서 다음 줄이 두 번 나타납니다 :'[INFO] CP : /home/user/.m2/repository/org/datanucleus/datanucleus-core/3.2.7/datanucleus-core- 3.2.7.jar' –

+0

내 모든 프로젝트에는 pom.xml deps에서 datanucleus-core가 있으며, M2 enhancer 플러그인도 사용합니다. "mvn --debug"를 두 번 사용하여 결정할 수 있고 그 두 항목의 출처에 대해 무엇을 말하는지 확인할 수 있습니다. – DataNucleus

+0

플러그인 종속성 자체에서 한 번 가져 왔습니다. (필자는이 버전을 덮어 씁니다) 나는 그것을 가지고 있습니다. 프로젝트 의존성에서 한 번. –