Frage

ich habe ein Problem Datanucleus Enhancer Einrichtung mit Google App Engine-Projekt zu verwenden. Wenn ich das Datanucleus Eclipse-Plugin alles verwende gut geht, aber in meinem Maven Projekt bekomme ich einen seltsamen widersprüchliche Version Fehler.

Meine POM hat diese Datanucleus Referenzen:

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

Wenn ich versuche, das Projekt bekomme ich folgende Fehler zu erstellen:

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)

Ich verstehe nicht, warum Datanucleus Maven erforderlich Datanucleus-Core-1.1.3.jar herunterladen, da diese nicht in der pom.xml verwiesen wird,

Ich verstehe auch nicht, warum Datanucleus-Core-1.1.3.jar wird registriert ...

Irgendwelche Ideen? Vielen Dank im Voraus ...

War es hilfreich?

Lösung

Die DN M2-Plugin in den neuesten Versionen der verfügbaren DN Gläser zieht, dass es seine Arbeit zu tun braucht (es gibt keinen anderen vernünftigen Weg, um es andere zu tun, als die neuesten verwenden). Sie wollen „Kern“ auf eine andere Version zu beschränken, entweder durch die Plugin Abhängigkeit von Kern angibt, oder durch die Angabe, dass in Ihrer Anwendung

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

Andere Tipps

Leider ist die Antwort "versteckt" in den Kommentaren:

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

Das funktioniert für mich!

Ich lief in das gleiche Problem, während ein Maven Plugin gae Urbild zu testen.

Ich reparierte es durch Ausschlüsse in meiner gae Laufzeit transitive Abhängigkeiten Hinzufügen

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

und dann den Kern Kern als Laufzeitabhängigkeit

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

als hält den gae Plugin Abschnitt einfach:

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

Nach der Lektüre „ Wie ein Plugin der Abhängigkeit in Maven “außer Kraft zu setzen, fand ich eine anderen Weg, dies zu beheben. Hier ist mein 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>

Löschen Ihre alte Version von Datanucleus von Ihrem lokalen Maven-Repository auch das Problem zu lösen.

Maven-Datanucleus-Plugin wird in den neuesten Versionen der verfügbaren Datanucleus-Core ab Version 3.1.1 gestoppt ziehen.

Überprüfen Sie die Unterschiede zwischen den POM-Dateien für 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 ) und 3.1.0-Release ( http://mvnrepository.com/artifact/org.datanucleus/maven-datanucleus-plugin/3.1.0-release ).

Für Maven-Datanucleus-Plugin 3.1.1 die Version Bereich von Datanucleus-Core-Abhängigkeit ist (3.0.99, 3.1.99) und für Maven-Datanucleus-Plugin 3.1.0-Release ist (3.0.99, ). Kein Wunder, für die älteren Versionen von Maven-Datanucleus-Plugin, es zieht automatisch in den neuesten Versionen von Datanucleus-Core.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top