2009-12-09 7 views
5

Sto eseguendo un progetto che ha una dipendenza da Groovy 1.7-beta-1. Il plugin gmaven usa groovy versione 1.6 come dipendenza. Nel mio pom, a specificare nella sezione gestione delle dipendenze del grooyv-tutte le versioni come:maven dependencies groovy

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.codehaus.groovy</groupId> 
      <artifactId>groovy-all</artifactId> 
      <version>1.7-beta-1</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

Eppure, quando corro Maven in modalità debug vedo che Groovy 1.6 viene utilizzato per una dipendenza al plugin gmaven. Ho pensato che la mia sezione di gestione delle dipendenze avrebbe annullato questo in modo che tutti usassero 1.7-beta-1, ma sto ricevendo errori a causa delle diverse versioni groovy. Qualsiasi aiuto qui sarebbe apprezzato.

grazie,

Jeff

risposta

6

Ecco una versione raffinata della risposta di Pascal. Ho aggiornato la versione del plug-in principale a 1.2, la dipendenza da Groovy 1.7, e l'ho completata in un tag pluginManagement in modo che possa sfruttare al meglio il modello di ereditarietà.

Ricordare che 1.3-SNAPSHOT del plugin GMaven ha già iniziato a utilizzare il provider 1.7-rc2 di 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> 
+0

Ho appena inviato una patch al plugin archetype in modo che Maven central riceva un nuovo riferimento all'org.codehaus.gmaven: gmaven plug-in: 1.2 invece dell'edizione 2008 a cui è indirizzato ora. –

+0

Problema link in JIRA è qui in modo da poter seguire per quando viene accettato http://jira.codehaus.org/browse/ARCHETYPE-272 Si prega di votare su in JIRA così la gente lo nota. –

+1

Si potrebbe voler aggiungere providerSelection = 1.7 nella configurazione e un'esclusione sul transiente groovy-all 1.7-beta secondo la risposta fornita qui: http://stackoverflow.com/questions/2199547/maven-compile-mixed-java-groovy-1-7-project-using-gmaven-plugin/2221752#2221752 – Tim

0

è necessario aggiungere una simile dipendenza 1.7 alle dipendenze del plugin in una sezione <plugin> o <pluginManagement> analoga struttura. La sezione di gestione delle dipendenze che si sta aggiungendo è corretta, ma non influisce sulle dipendenze del plug-in. Proverò a rivedere questa risposta e a pubblicare un esempio più tardi quando torno alla mia scrivania.

+0

Grazie, Matthew Nel frattempo, ho aggiornato a. il nuovo plugin gmaven che ha "risolto" il problema ma certamente non il modo più pulito per farlo –

2

Ignorare una dipendenza utilizzata da un plug-in è una buona capacità introdotta da Maven 2.0.9.

Per fare ciò, almeno con un plug-in che si utilizza come un normale plug-in di compilazione - in contrasto con un report che non è il caso con lo gmaven-plugin quindi non mi occuperò di questo caso qui - basta aggiungere un blocco di dipendenza all'interno del blocco plug-in, come questo (si tratta di un campione così le versioni possono essere imprecisi):

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

finché la nuova versione della dipendenza è "API compatibile" con la versione del plugin è stato collegato contro , dovresti essere ok. In caso contrario, dovrai ovviamente eseguire l'aggiornamento a una versione più recente del plug-in compatibile con la nuova API (ovvero utilizzarla probabilmente come dipendenza), che è ciò che hai fatto.

1

Per fare in modo che gmaven scelga con precisione il runtime giusto è configurando il valore "providerSelection", ad es.

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
      <configuration> 
       <providerSelection>1.7</providerSelection> 
      </configuration> 

Cordiali saluti, per il groovy:providers mojo, queste sono le configurazioni che si aspetta (li ho estratto dal debug di org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(List, Stack, MavenSession, MavenProject) (cercare 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>