首页 > 解决方案 > 无法从 maven 获取 datanuecleus 3.1.3

问题描述

试图解决错误

Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class

我发现有几篇文章解释了这可能是由于使用了不兼容的 datanueclus 依赖项版本造成的。

所以我降级了一些我用来使用我认为兼容的版本的版本(请参阅下面的 pom.xml)但我的问题是 maven 没有为我获得 datanueclus-core 3.1.3。即使我特别要求 3.1.3,它也只会获得最新版本 5.2.5

我该如何解决这个问题?如果我要求 5.2.4,它会毫无问题地得到那个。但如果我尝试获得 3.1.3,它只会获得最新的。

Maven 依赖项上的 datanueclues-core:

在此处输入图像描述

pom上的datanueclues-core:

在此处输入图像描述

pom.xml:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>

  <groupId>bbva.cib</groupId>
  <artifactId>Aprov</artifactId>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>
    
    <!-- WebApp/War Output Directory -->
    <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
    <!-- for hot reload of the web application-->
    <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
    <sourceDirectory>src</sourceDirectory>    
    
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>libraries-bom</artifactId>
        <version>14.4.1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
           <groupId>com.google.gwt</groupId>
           <artifactId>gwt</artifactId>
           <version>2.7.0</version>
           <type>pom</type>
           <scope>import</scope>
       </dependency>
    </dependencies>
   </dependencyManagement>

  <dependencies>
    <!-- Compile/runtime dependencies -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-1.0-sdk</artifactId>
        <version>1.9.83</version>
    </dependency>
    <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-framework</artifactId>
        <version>2.2.1</version>
    </dependency>
    
    <!-- Test Dependencies -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.4.5</version>
        <scope>provided</scope>         
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.4.5</version>
        <scope>provided</scope>         
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>3.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-excelant</artifactId>
        <version>3.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-examples</artifactId>
        <version>3.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>3.12</version>
    </dependency>   
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/com.google.gwt/gwt-servlet -->
    <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt-servlet</artifactId>
        <scope>runtime</scope>
    </dependency>

     <dependency>
         <groupId>com.google.gwt</groupId>
         <artifactId>gwt-user</artifactId>
         <scope>provided</scope>
     </dependency>
     <dependency>
         <groupId>com.google.gwt</groupId>
         <artifactId>gwt-dev</artifactId>
         <scope>provided</scope>
     </dependency>
     
    
    <dependency>
             <groupId>org.datanucleus</groupId>
              <artifactId>datanucleus-maven-plugin</artifactId>
         <version>3.2.0-m2</version>
    </dependency>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>javax.jdo</artifactId>  
            <version>3.2.0-m6</version>
        </dependency>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-core</artifactId>
            <version>3.1.3</version>
              <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-api-jdo</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
             <groupId>org.datanucleus</groupId>
             <artifactId>datanucleus-api-jpa</artifactId>
             <version>3.1.3</version>
        </dependency>
        
        <dependency>
            <groupId>com.google.appengine.orm</groupId>
            <artifactId>datanucleus-appengine</artifactId>
            <version>2.1.2</version>
        </dependency>
    
    
  </dependencies>


  <build>
    <!-- for hot reload of the web application-->
    <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
    <pluginManagement>
    <plugins>
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>2.4.0</version>
      </plugin>
      <plugin>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-maven-plugin</artifactId>
          <version>9.4.34.v20201102</version>
      </plugin>
      
     
      <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>2.7.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test</goal>
                        </goals>
                    </execution>
                </executions>
                <!-- Plugin configuration. There are many available options, see gwt-maven-plugin 
                    documentation at codehaus.org -->
                <configuration>
                    <runTarget>Aprov.html</runTarget>
                    <hostedWebapp>${webappDirectory}</hostedWebapp>
                    <superDevMode>false</superDevMode>
                    <sourceLevel>1.7</sourceLevel>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    
                </configuration>
            </plugin>
            
            <plugin>
                <groupId>org.datanucleus</groupId>
                <artifactId>maven-datanucleus-plugin</artifactId>
                <version>3.2.0-m1</version>
                <configuration>
                    <log4jConfiguration>${webappDirectory}/WEB-INF/log4j.properties</log4jConfiguration>
                    <api>JDO</api>
                        <persistenceUnitName>transactions-optional</persistenceUnitName>
                    <verbose>true</verbose>
                    <enhancerName>ASM</enhancerName>
                </configuration>
                <executions>
                    <execution>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>enhance</goal>
                        </goals>
                    </execution>
                </executions>
               
            </plugin>
          </plugins>
          </pluginManagement>
  </build>
</project>

请同时检查我的版本是否兼容。我尝试遵循此https://code.google.com/archive/p/datanucleus-appengine/wikis/Compatibility.wiki但我不确定我是否理解。

提前致谢

标签: eclipsemavengoogle-app-enginegwtdatanucleus

解决方案


听起来其他一些依赖项具有版本 5.2.4 作为依赖项。

在您的<dependencyManagement>部分中,您需要强制版本,如下所示:

<dependency>
   <groupId>org.datanucleus</groupId>
   <artifactId>datanucleus-maven-plugin</artifactId>
   <version>3.2.0-m2</version>
</dependency>

在您的常规<dependencies>部分中,您应该指定没有版本的工件,如下所示:

<dependency>
   <groupId>org.datanucleus</groupId>
   <artifactId>datanucleus-maven-plugin</artifactId>
</dependency>

推荐阅读