tutorial google for engine app google-app-engine maven-2 datanucleus

google app engine - for - Versiones conflictivas de DataNucleus Enhancer en un proyecto de motor de aplicaciones Google.



google sdk app engine (6)

Estoy teniendo problemas para configurar el potenciador de datos para usar con un proyecto de motor de aplicaciones de Google. Si utilizo el plugin eclipse de datanucleus, todo va bien, pero en mi proyecto de Maven me sale un extraño error de versión conflictiva.

Mi POM tiene estas referencias de 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 trato de construir el proyecto obtengo 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 requirió a maven para descargar datanucleus-core-1.1.3.jar ya que esto no está referenciado en el pom.xml

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

¿Algunas ideas? Gracias por adelantado...


Desafortunadamente la respuesta está "oculta" 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í!


Después de leer " Cómo anular la dependencia de un complemento en Maven ", encontré otra forma de solucionar 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>


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

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


Maven-datanucleus-plugin ha dejado de introducir las últimas versiones del núcleo de datanucleus disponible desde la versión 3.1.1.

Verifique 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 versiones de la dependencia de 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 las versiones anteriores de maven-datanucleus-plugin, incorporen automáticamente las últimas versiones de datanucleus-core.


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

Lo arreglé agregando exclusiones en mis dependencias transitivas de gae runtime

<!-- 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 agregar 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 mantener la sección del 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>


borrando su versión anterior de datanucleus de su repositorio local de maven también resolviendo el problema.