2013-07-16 3 views
9

The 3.1.0 release of Maven은 Sonatype Aether (org.sonatype.aether) 대신 Eclipse Aether (org.eclipse.aether)를 사용합니다. 이러한 플러그인을 실행 해보십시오 당신이로 실행하겠습니다 : 이 Sonatype의 오드에 의존하는 플러그인에 대한 호환성을 깰 것으로 보인다 지금 https://cwiki.apache.org/confluence/display/MAVEN/AetherClassNotFoundAether를 사용하는 maven mojo는 Maven 3.0.x 및 3.1.x와 호환 될 수 있습니까?

에 설명 된대로

java.lang.NoClassDefFoundError: org/sonatype/aether/* 
Caused by: java.lang.ClassNotFoundException: org.sonatype.aether.* 

, IT는 모조가 의존하는 것이 가능하다 aether 클래스 (예 : org.sonatype.aether.RepositorySystemSession) Maven 3.0.x와 Maven 3.1.x 둘 다에서 실행 하시겠습니까?

또는 동일한 플러그인 (3.0.x 용과 3.1.x 용)의 두 버전을 출시해야합니까? 이 같은 집행자 규칙을 퍼팅 :

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
     <id>enforce-maven</id> 
     <goals> 
      <goal>enforce</goal> 
     </goals> 
     <configuration> 
      <rules> 
      <requireMavenVersion> 
       <version>[3.0,3.1)</version> 
      </requireMavenVersion> 
      </rules> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

I already posted the question on Maven developers mailing list 하지만 지금까지 아무 대답 ...

+0

가장 좋은 점은 더 좋은 힌트를 줄 수 있도록 소스 코드를 표시하는 것입니다. – khmarbaise

답변

2

these plugins의 대부분은 상관없이 메이븐 버전 의존성의 오른쪽 세트를 수집 할 수있는 Maven Dependency Tree에 의존 . 버전 2.1이 Sonatype Aether 옆에 Eclipse Aether를 지원하기 위해 출시되었습니다. 플러그인에서이 구성 요소를 사용할 수 있으면 저장해야합니다.

+0

내 플러그인이 aether를 직접 사용해서는 안되며 Maven 의존성 트리 API에 의존하고 있다고 말하는가? –

+0

가능하다면 예. 당신은 당신의 플러그인이하는 일을 설명하지 않았지만 이것이 종속물이나 인공물에 관한 것이라면, Maven-dependency-tree가 답이 될 것입니다. 언급 된 플러그인의 소스 코드를 살펴보고 해결 방법을 확인하십시오. –

+0

@RobertScholte,'maven-dependency-tree' 플러그인을 어떻게 사용할 수 있습니까? ['DependencyGraphBuilder'] (http://maven.apache.org/shared/maven-dependency-tree/apidocs/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.html) 만 노출됩니까? –

0

아주 좋은 질문입니다! maven 인덱서를 사용하여 일부 아티팩트를 찾습니다. 중앙에서 Maven 인덱스를 프로그래밍 방식으로 다운로드하고 쿼리를 실행하고 있습니다. 이건 내 방법 :

나는 3.1.0을 받는다는 업데이트 및 org.eclipse.aether 나는이 예외를 얻고하기 때문에
public IteratorSearchResponse executeGroupArtifactSearch(String group, String artifact) throws Exception { 
     Query groupIdQ  = indexer.constructQuery(MAVEN.GROUP_ID, new SourcedSearchExpression(group)); 
     Query artifactIdQ = indexer.constructQuery(MAVEN.ARTIFACT_ID, new SourcedSearchExpression(artifact)); 
     BooleanQuery query = new BooleanQuery(); 
     query.add(groupIdQ , Occur.MUST); 
     query.add(artifactIdQ, Occur.MUST); 
     query.add(indexer.constructQuery(MAVEN.CLASSIFIER, new SourcedSearchExpression(Field.NOT_PRESENT)), Occur.MUST_NOT); 
     IteratorSearchRequest request = new IteratorSearchRequest(query, Collections.singletonList(centralContext), null); 
     IteratorSearchResponse response = indexer.searchIterator(request); 
     return response; 
    } 

:

Caused by: java.lang.ClassNotFoundException: org.sonatype.aether.version.InvalidVersionSpecificationException 
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) 
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244) 
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230) 
    ... 30 more 

3.1.0 메이븐 인덱서 여전히 것 같다 org.sonatyep.aether에 대한 일부 종속성. "org.sonatype.aether.version.InvalidVersionSpecificationException"여전히 프로젝트의 일부이기 때문에 나는이 Exception을 얻을만큼 충분히 흥미 롭다.

어떻게 해결할 수 있습니까?

+0

좋습니다. 나는 "org.apache.maven.indexer : maven-indexer : 5.1.1"을 리팩토링했다. 모든 종속성을 "org.sonatype.aether"로 제거하고이를 "org.eclipse.aethter"로 바꿨습니다. 모든 테스트는 녹색이며 내 로캘 repo에 배포했습니다. 이제이 예외가 발생합니다 : https://gist.github.com/mosabua/6068386 –

+1

"org.sonatype.aether"를 "org.eclipse.aether"로 바꾸면 M3에서 작동하지 않는다는 것을 알아 두십시오. 0.x 더 이상. –

+0

팁 주셔서 감사. 난 그것을 알아 챘다. –