2013-07-16 13 views
9

The 3.1.0 release of Maven si basa su Eclipse Aether (org.eclipse.aether) anziché su Sonatype Aether (org.sonatype.aether). Questo sembra rompere la compatibilità per i plugin basandosi su Sonatype dell'etere: tenta l'esecuzione di tali plugin e si incorrerà in:Un Maven Mojo può fare affidamento su Aether essere compatibile con Maven 3.0.xe 3.1.x?

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

Come documentato in https://cwiki.apache.org/confluence/display/MAVEN/AetherClassNotFound

Ora, è possibile fare un mojo affidandosi sulle classi etere (come org.sonatype.aether.RepositorySystemSession) esegui entrambi con Maven 3.0.xe Maven 3.1.x?

Oppure devo rilasciare due versioni dello stesso plug-in, una per 3.0.xe una per 3.1.x? Mettere regole Enforcer come questo:

<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, ma nessuna risposta finora ...

+0

La cosa migliore è mostrare il codice sorgente dove fallisce, così potremmo dare suggerimenti migliori. – khmarbaise

risposta

2

La maggior parte di these plugins dipendono dalla Maven Dependency Tree, che è in grado di raccogliere il giusto insieme di dipendenze non importa la versione Maven . La versione 2.1 è stata rilasciata per supportare Eclipse Aether accanto a Sonatype Aether Se il plug-in può utilizzare questo componente, è necessario salvare.

+0

stai dicendo che il mio plugin non dovrebbe usare direttamente l'etere, ma piuttosto fare affidamento sull'api dell'albero delle dipendenze di Maven? –

+0

Se è possibile, sì. Non hai spiegato cosa fa il tuo plugin, ma se si tratta di un (sotto) set di dipendenze o artefatti, maven-dependency-tree è la risposta. Dai un'occhiata al codice sorgente dei plug-in menzionati per vedere come l'hanno risolto. –

+0

@RobertScholte, Come si può usare il plugin 'maven-dependency-tree'? Espone solo un ['DependencyGraphBuilder'] (http://maven.apache.org/shared/maven-dependency-tree/apidocs/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.html)? –

0

Ottima domanda! Sto usando l'indicizzatore Maven per cercare alcuni artefatti. Sto scaricando a livello di codice l'indice Maven dalle query centrali e in esecuzione su di esso. Questo è il mio metodo:

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; 
    } 

da quando ho aggiornato a Maven 3.1.0 e org.eclipse.aether sto ottenendo questa eccezione:

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 

Sembra che la 3.1.0 Maven indicizzatore ha ancora alcune dipendenze da org.sonatyep.aether. Curioso che ottenga questa eccezione perché "org.sonatype.aether.version.InvalidVersionSpecificationException" fa ancora parte del progetto.

Quindi come posso risolvere questo?

+0

Va bene. Ho refactored "org.apache.maven.indexer: maven-indexer: 5.1.1". Ho rimosso tutte le dipendenze da "org.sonatype.aether" e l'ho sostituito con "org.eclipse.aethter". Tutti i test sono ecologici e l'ho implementato nel mio repository locale. Ora sto ricevendo questa eccezione: https://gist.github.com/mosabua/6068386 –

+1

Ricorda che sostituire "org.sonatype.aether" con "org.eclipse.aether" significherebbe che non funzionerà con M3. 0.x più. –

+0

Grazie per il suggerimento. Ho notato che. –

Problemi correlati