2009-05-18 12 views
19

Tengo un problema al configurar el potenciador de datanucleus para usar con un proyecto de motor de aplicación de Google. Si uso el plugin datanucleus eclipse, todo va bien, pero en mi proyecto maven me sale un extraño error de versión conflictiva.Versiones conflictivas de potenciador de datanucleus en un proyecto de motor de aplicación de google de maven

Mi POM tiene estas referencias: DataNucleus

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

Cuando intento para construir el proyecto me sale el siguiente error:

 
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) 

No entiendo por qué DataNucleus requiere experto para descargar DataNucleus -core-1.1.3.jar ya que no se hace referencia en el pom.xml

Tampoco entiendo por qué se está registrando datanucleus-core-1.1.3.jar ...

¿Alguna idea? Gracias de antemano ...

Respuesta

6

El complemento DN M2 extrae las últimas versiones de los frascos DN disponibles que necesita para hacer su trabajo (no hay otra manera sensata de hacerlo que no sea la última). Desea limitar el "núcleo" de una versión diferente, ya sea especificando la dependencia complemento del núcleo, o bien especificando que, en su aplicación a

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

No creo que sea posible excluir una versión diferente del mismo artefacto. grupo-a artefacto-a 1,0 grupo-c excluidos-artefacto ivo

+1

El plugin DN M2 hace la única razonable Lo que puede hacer ; usa lo último No veo otra forma de tener un complemento M2 y no tener que lanzar una nueva versión cada vez que lanzamos una nueva versión de un contenedor dependiente y es por lo que se introdujeron los rangos de versión M2. Otras personas han tenido ninguna manipulación de este http://groups.google.com/group/google-appengine-java/browse_thread/thread/aeaffa3f33e1e4e2/095300c75cd9da39?lnk=gst&q=maven-datanucleus#095300c75cd9da39 Obviamente Google actualización problema su jar de complemento DN significaría que es irrelevante. – DataNucleus

+0

Después del enlace que proporcionó, de hecho, al cambiar el alcance a 'tiempo de ejecución' se solucionó el problema. Gracias por el apoyo :-) – ivo

5

desgracia, la respuesta es "oculto" en los comentarios:

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

¡Eso funcionó para mí!

0

limpiando su versión anterior de datanucleus de su repositorio local de maven y solucionando el problema.

2

Me encontré con el mismo problema al probar un arquetipo de maven gae plugin.

me fijo mediante la adición de exclusiones en mis gae tiempo de ejecución transitivos dependencias

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

y luego añadir el núcleo núcleo como una dependencia de tiempo de ejecución

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

como el mantenimiento de la sección plugin de gae simple:

<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

Después de leer "How to override a plugin's dependency in Maven", encontré otra manera t o arregla esto Aquí está mi 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

Creo que esta es la respuesta más sensata para esto. Reparar el alcance para el tiempo de ejecución no funciona para mí de todos modos. Lo que realmente quiero es arreglar la versión de datanucleus-core utilizada por el enhancer para que sea la misma que la que usa mi aplicación. – jpitt42

0

Maven-DataNucleus-plugin ha dejado de tirar en las últimas versiones de la DataNucleus núcleos disponible desde la versión 3.1.1.

Compruebe las diferencias entre los archivos POM para Maven-datanucleus-plugin 3.1.1 (http://repo1.maven.org/maven2/org/datanucleus/maven-datanucleus-plugin/3.1.1/maven-datanucleus-plugin-3.1.1.pom) y 3.1.0-release (http://mvnrepository.com/artifact/org.datanucleus/maven-datanucleus-plugin/3.1.0-release).

Para maven-datanucleus-plugin 3.1.1 el rango de versión de la dependencia datanucleus-core es (3.0.99, 3.1.99), y para maven-datanucleus-plugin 3.1.0-release es (3.0.99 ,). No es de extrañar que para las versiones anteriores de maven-datanucleus-plugin, automáticamente se incorporen las últimas versiones de datanucleus-core.

Cuestiones relacionadas