versiones en conflicto de potenciador DataNucleus en un proyecto de motor de aplicación experto Google

StackOverflow https://stackoverflow.com/questions/877949

Pregunta

Estoy teniendo promotor de la creación de DataNucleus de usar con un proyecto de motor de aplicación de Google un problema. Si utilizo el eclipse DataNucleus Plugin todo va bien, pero en mi proyecto Maven consigo un error versión con conflictos extraño.

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 requeridos experto para descargar DataNucleus-core-1.1.3.jar ya que este no se hace referencia en el pom.xml

Asimismo, no entiendo por qué se está registrando DataNucleus-core-1.1.3.jar ...

¿Alguna idea? Gracias por adelantado ...

¿Fue útil?

Solución

El plugin DN M2 tira en las últimas versiones de los frascos DN disponibles que necesita para hacer su trabajo (no hay otra manera sensata de hacerlo que no sea utilizar la última). Desea limitar el "núcleo" de una versión diferente, ya sea especificando la dependencia complemento de 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>

Otros consejos

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

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

Me fijo mediante la adición de exclusiones en mi gae tiempo de ejecución transitiva 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 añadiendo a continuación 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 gae simple plugin:

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

Después de leer " Cómo reemplazar la dependencia de un plugin de Maven ", he encontrado otra manera de solucionar este problema. 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>

despejar su versión antigua de DataNucleus desde el repositorio maven local también resolver el problema.

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

Comprobar las diferencias entre los archivos de POM 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 dependencia DataNucleus-núcleo es (3.0.99, 3.1.99), y para maven-DataNucleus-plugin 3.1.0 de liberación es (3.0.99, ). No es extraño para las versiones anteriores de maven-DataNucleus-plugin, se extrae automáticamente en las últimas versiones de DataNucleus núcleos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top