Question

Je vais avoir un problème de mise en place d'activateur DataNucleus à utiliser avec un projet de Google App Engine. Si j'utilise le plugin Eclipse de DataNucleus tout va bien, mais dans mon projet Maven j'obtiens une erreur étrange version en conflit.

Mon POM a ces références 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>

Lorsque je tente de construire le projet, je reçois l'erreur suivante:

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)

Je ne comprends pas pourquoi DataNucleus requis Maven pour télécharger DataNucleus-core-1.1.3.jar puisque ce n'est pas référencé dans le pom.xml

Je ne comprends pas pourquoi est enregistré DataNucleus-core-1.1.3.jar ...

Toutes les idées? Merci à l'avance ...

Était-ce utile?

La solution

Le plugin DN M2 tire dans les dernières versions des pots DN disponibles dont il a besoin pour faire son travail (il n'y a pas d'autre moyen raisonnable de le faire autre que d'utiliser la dernière). Vous voulez limiter « noyau » à une version différente, que ce soit en spécifiant la dépendance de plug-in de base, ou en précisant que dans votre application à

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

Autres conseils

Malheureusement, la réponse est dans les commentaires « caché »:

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

Cela a fonctionné pour moi!

Je suis tombé sur la même question tout en testant un archétype du plugin Gae maven.

Je l'ai fixé en ajoutant des exclusions dans mon Gae exécution transitif dépendances

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

et en ajoutant ensuite le noyau du noyau en tant que dépendance d'exécution

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

comme maintenant la section plugin 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>

Après avoir lu « Comment remplacer la dépendance Maven un plug-in », j'ai trouvé une autre façon de résoudre ce problème. Voici mon 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>

la suppression de votre ancienne version de DataNucleus de votre repository locale également résoudre le problème.

Maven-DataNucleus-plugin a cessé de tirer dans les dernières versions du DataNucleus-core disponible depuis la version 3.1.1.

Vérifiez les différences entre les fichiers 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 ) et 3.1.0-release ( http://mvnrepository.com/artifact/org.datanucleus/maven-datanucleus-plugin/3.1.0-release ).

maven-DataNucleus-plugin 3.1.1 la plage de version de dépendance DataNucleus-core est (3.0.99, 1.3.99), et pour maven-DataNucleus-plugin 3.1.0-release est (3.0.99, ). Pas étonnant que pour les anciennes versions de maven-plugin-DataNucleus, il tire automatiquement dans les dernières versions de DataNucleus-core.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top