2009-05-18 10 views
19

Sto riscontrando un problema nella configurazione di enhanan di datanucleus da utilizzare con un progetto del motore di app di google. Se uso il plugin ecanse datanucleus, tutto va bene, ma nel mio progetto di Maven ottengo uno strano errore di versione in conflitto.Versione in conflitto del potenziatore di datanucleus in un progetto del motore di app google mobile

mio POM ha queste DataNucleus riferimenti:

<dependency> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>datanucleus-core</artifactId> 
    <version>1.1.0</version> 
</dependency> 

... 

<plugin> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>maven-datanucleus-plugin</artifactId> 
    <version>1.1.0</version> 
    <configuration> 
     <mappingIncludes>**/*.class</mappingIncludes> 
     <verbose>true</verbose> 
     <enhancerName>ASM</enhancerName> 
     <api>JDO</api> 
    </configuration> 
    <executions> 
     <execution> 
     <phase>compile</phase> 
     <goals> 
      <goal>enhance</goal> 
     </goals> 
     </execution> 
    </executions> 
</plugin> 

Quando provo a costruire il progetto ottengo il seguente errore:

 
Exception in thread "main" Plugin (Bundle) "org.datanucleus" is already registered. 
Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/Users/drome/.m2/repository/org/datanucleus/datanucleus-core/1.1.0/**datanucleus-core-1.1.0.jar**" is already registered, and you are trying to register an identical plugin located at URL "file:/Users/drome/.m2/repository/org/datanucleus/datanucleus-core/1.1.3/**datanucleus-core-1.1.3.jar**." 
org.datanucleus.exceptions.NucleusException: Plugin (Bundle) "org.datanucleus" is already registered. Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/Users/drome/.m2/repository/org/datanucleus/datanucleus-core/1.1.0/datanucleus-core-1.1.0.jar" is already registered, and you are trying to register an identical plugin located at URL "file:/Users/drome/.m2/repository/org/datanucleus/datanucleus-core/1.1.3/datanucleus-core-1.1.3.jar." 
at org.datanucleus.plugin.NonManagedPluginRegistry.registerBundle(NonManagedPluginRegistry.java:437) 
at org.datanucleus.plugin.NonManagedPluginRegistry.registerBundle(NonManagedPluginRegistry.java:343) 
at org.datanucleus.plugin.NonManagedPluginRegistry.registerExtensions(NonManagedPluginRegistry.java:227 
) 
at org.datanucleus.plugin.NonManagedPluginRegistry.registerExtensionPoints(NonManagedPluginRegistry.jav 
a:159) 
at org.datanucleus.plugin.PluginManager.registerExtensionPoints(PluginManager.java:82) 
at org.datanucleus.OMFContext.(OMFContext.java:164) 
at org.datanucleus.enhancer.DataNucleusEnhancer.(DataNucleusEnhancer.java:171) 
at org.datanucleus.enhancer.DataNucleusEnhancer.(DataNucleusEnhancer.java:149) 
at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1157) 

Non capisco il motivo per cui DataNucleus tenuti Maven per scaricare DataNucleus -core-1.1.3.jar poiché questo non è referenziato in pom.xml

Inoltre non capisco perché datanucleus-core-1.1.3.jar sia registrato ...

Qualche idea? Grazie in anticipo ...

risposta

6

Il plug-in DN M2 include le ultime versioni dei contenitori DN disponibili necessari per svolgere il proprio lavoro (non esiste un altro modo ragionevole di farlo se non quello più recente). Si desidera limitare "core" per una versione diversa, sia specificando la dipendenza plug-in del nucleo, o specificando che nell'applicazione per

<dependency> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>datanucleus-core</artifactId> 
    <version>1.1.0</version> 
    <scope>runtime</scope> 
</dependency> 
+0

Non penso sia possibile escludere una versione diversa dello stesso artefatto. group-a artefatto-a 1,0 gruppo-c esclusi-artefatto ivo

+1

Il plugin DN M2 fa l'unica ragionevole cosa può fare ; usa l'ultimo Non vedo altro modo di avere un plug-in M2 e di non dover rilasciare una nuova versione ogni volta che rilasciamo una nuova versione di un jar dipendente ed è ciò per cui sono stati introdotti gli intervalli di versione M2. Altre persone non hanno avuto la manipolazione di questo http://groups.google.com/group/google-appengine-java/browse_thread/thread/aeaffa3f33e1e4e2/095300c75cd9da39?lnk=gst&q=maven-datanucleus#095300c75cd9da39 Ovviamente l'aggiornamento di Google problema il loro jar plugin DN significherebbe che è irrilevante. – DataNucleus

+0

Seguendo il collegamento che hai fornito, infatti, la modifica dell'ambito a "runtime" ha risolto il problema. Grazie per il supporto :-) – ivo

5

Purtroppo la risposta è "nascosto" nei commenti:

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

Questo ha funzionato per me!

0

cancellare la vecchia versione di datanucleus dal repository di Maven locale risolvendo anche il problema.

2

Mi sono imbattuto nello stesso problema durante il test di un archetipo di plugin maven gae.

ho fissato aggiungendo esclusioni nei miei gae runtime transitivi dipendenze

<!-- Google App Engine meta-package --> 
     <dependency> 
      <groupId>net.kindleit</groupId> 
      <artifactId>gae-runtime</artifactId> 
      <version>${gae.version}</version> 
      <type>pom</type> 
      <exclusions> 
       <exclusion> 
        <groupId>com.google.appengine.orm</groupId> 
        <artifactId>datanucleus-core</artifactId> 
       </exclusion> 

      </exclusions> 
     </dependency> 

e quindi aggiungendo il nucleo nucleo come dipendenza runtime

<dependency> 
      <groupId>org.datanucleus</groupId> 
      <artifactId>datanucleus-core</artifactId> 
      <version>${datanucleus-core.version}</version> 
      <scope>runtime</scope> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.transaction</groupId> 
        <artifactId>transaction-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

come mantenere la sezione plug gae semplice:

<plugin> 
       <groupId>org.datanucleus</groupId> 
       <artifactId>maven-datanucleus-plugin</artifactId> 
       <version>${maven-datanucleus-plugin.version}</version> 
       <configuration> 
        <!-- 
         Make sure this path contains your persistent classes! 
        --> 
        <mappingIncludes>**/model/*.class</mappingIncludes> 
        <verbose>true</verbose> 
        <enhancerName>ASM</enhancerName> 
        <api>JDO</api> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>compile</phase> 
         <goals> 
          <goal>enhance</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
2

Dopo aver letto "How to override a plugin's dependency in Maven", ho trovato un altro modo t o aggiustalo. Ecco la mia POM:

<plugin> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>maven-datanucleus-plugin</artifactId> 
    <version>3.1.0-m3</version> 
    <configuration> 
    <verbose>true</verbose> 
    </configuration> 

    <executions> 
    <execution> 
     <phase>process-classes</phase> 
     <goals> 
     <goal>enhance</goal> 
     </goals> 
    </execution> 
    </executions> 

    <dependencies> 
    <dependency> 
     <groupId>org.datanucleus</groupId> 
     <artifactId>datanucleus-core</artifactId> 
     <version>3.0.4</version> 
    </dependency> 
    </dependencies> 
</plugin> 
+0

Penso che questa sia la risposta più sana per questo. Fissare l'ambito al runtime non funziona comunque per me. Quello che voglio veramente è quello di correggere la versione di datanucleus-core utilizzata dal enhancer per essere uguale a ciò che viene usato dalla mia applicazione. – jpitt42

0

Maven-DataNucleus-plugin ha smesso di tirare nelle ultime versioni del DataNucleus-core disponibile a partire dalla versione 3.1.1.

Controllare le differenze tra i file POM per Maven-datanucleus-plug-in 3.1.1 (http://repo1.maven.org/maven2/org/datanucleus/maven-datanucleus-plugin/3.1.1/maven-datanucleus-plugin-3.1.1.pom) e 3.1.0-release (http://mvnrepository.com/artifact/org.datanucleus/maven-datanucleus-plugin/3.1.0-release).

Per maven-datanucleus-plug-in 3.1.1 l'intervallo di versione della dipendenza datanucleus-core è (3.0.99, 3.1.99), e per maven-datanucleus-plugin 3.1.0-release è (3.0.99 ,). Non c'è da stupirsi per le versioni precedenti di maven-datanucleus-plug-in, che richiama automaticamente le ultime versioni di datanucleus-core.

Problemi correlati