Java 在Maven项目中导入Cplex库时,如何修复“不兼容ClassChangeError:实现类”?

Java 在Maven项目中导入Cplex库时,如何修复“不兼容ClassChangeError:实现类”?,java,maven,cplex,opl,Java,Maven,Cplex,Opl,我正在尝试使用Ubuntu16.04在Maven项目上导入Cplex 因此,我使用以下命令将cplex.jar添加到maven存储库: mvn安装:安装文件-DgroupId=cplex-DartifactId=cplex-Dversion=12.8-dpackage=jar-Dfile=/cplex/install/dir/cplex_Studio128/cplex/lib/cplex.jar 我在pom.xml中添加了依赖项: cplex 但我不明白,在这种情况下,可以进行什么样的不兼容二进

我正在尝试使用Ubuntu16.04在Maven项目上导入Cplex

因此,我使用以下命令将cplex.jar添加到maven存储库: mvn安装:安装文件-DgroupId=cplex-DartifactId=cplex-Dversion=12.8-dpackage=jar-Dfile=/cplex/install/dir/cplex_Studio128/cplex/lib/cplex.jar

我在pom.xml中添加了依赖项:

cplex 但我不明白,在这种情况下,可以进行什么样的不兼容二进制更改

是否可能存在一些不兼容的二进制更改? 如果不是,除了对这个错误的不兼容二进制更改之外,还有其他解释吗

编辑 我也使用与Cplex库相同的OPL库安装,我的系统上只有12.8版本的Cplex和Oplall

我试图再次清理和构建,但也遇到了同样的错误

这是我尝试在ModelFileEvaluator.java中运行的代码:

ILoopFactory.setDebugModetrue; iLopFactory oplF=新的iLopFactory; ILoopErrorHandler errHandler=oplF.createOplErrorHandler; ILOPLModelSource modelSource=oplF.createOplModelSourcefileName; ILoopSettings=oplF.createOplSettingserrHandler; ILoopModelDefinition def=oplF.createOplModelDefinitionmodelSource,设置; IloCplex cplex=oplF.createCplex; 这是完整的回溯:

java.lang.IncompatibleClassChangeError: Implementing class
    at java.lang.ClassLoader.defineClass1(java.base@9-internal/Native Method)
    at java.lang.ClassLoader.defineClass(java.base@9-internal/ClassLoader.java:939)
    at java.security.SecureClassLoader.defineClass(java.base@9-internal/SecureClassLoader.java:152)
    at java.net.URLClassLoader.defineClass(java.base@9-internal/URLClassLoader.java:463)
    at java.net.URLClassLoader.access$100(java.base@9-internal/URLClassLoader.java:76)
    at java.net.URLClassLoader$1.run(java.base@9-internal/URLClassLoader.java:371)
    at java.net.URLClassLoader$1.run(java.base@9-internal/URLClassLoader.java:365)
    at java.security.AccessController.doPrivileged(java.base@9-internal/Native Method)
    at java.net.URLClassLoader.findClass(java.base@9-internal/URLClassLoader.java:364)
    at java.lang.ClassLoader.loadClass(java.base@9-internal/ClassLoader.java:486)
    at java.lang.ClassLoader.loadClass(java.base@9-internal/ClassLoader.java:419)
    at java.lang.ClassLoader.defineClass1(java.base@9-internal/Native Method)
    at java.lang.ClassLoader.defineClass(java.base@9-internal/ClassLoader.java:939)
    at java.security.SecureClassLoader.defineClass(java.base@9-internal/SecureClassLoader.java:152)
    at java.net.URLClassLoader.defineClass(java.base@9-internal/URLClassLoader.java:463)
    at java.net.URLClassLoader.access$100(java.base@9-internal/URLClassLoader.java:76)
    at java.net.URLClassLoader$1.run(java.base@9-internal/URLClassLoader.java:371)
    at java.net.URLClassLoader$1.run(java.base@9-internal/URLClassLoader.java:365)
    at java.security.AccessController.doPrivileged(java.base@9-internal/Native Method)
    at java.net.URLClassLoader.findClass(java.base@9-internal/URLClassLoader.java:364)
    at java.lang.ClassLoader.loadClass(java.base@9-internal/ClassLoader.java:486)
    at java.lang.ClassLoader.loadClass(java.base@9-internal/ClassLoader.java:419)
    at ilog.opl.IloOplFactory.createCplex(IloOplFactory.java:227)
    at main.ModelFileEvaluator.testFile(ModelFileEvaluator.java:86)
    at main.ModelFileEvaluator.main(ModelFileEvaluator.java:53)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(java.base@9-internal/Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(java.base@9-internal/NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(java.base@9-internal/DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(java.base@9-internal/Method.java:531)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:282)
    at java.lang.Thread.run(java.base@9-internal/Thread.java:804)

使用OPL需要使用opall.jar。该jar与cplex.jar不兼容。您只能同时使用这两个选项中的一个。从类路径中删除cplex.jar应该可以解决这个问题。

您可以发布错误的完整回溯吗?从您展示的内容来看,没有证据表明这确实来自cplex或使用cplex。您能否清理项目并重新构建,并确保使用正确的cplex.jar?可能您的系统中某个地方有一个过时的cplex.jar,并且正在使用它进行构建。添加库后是否尝试运行maven clean?使用OPL进行构建需要在类路径上使用opall.jar进行构建。这与cplex.jar不兼容。一次只能使用其中一个。如果从类路径/依赖项中删除cplex.jar,情况会更好吗?实际上,你也向maven注册了oplall.jar吗?@DanielJunglas我用oplall替换了所有cplex导入,它开始工作了。请写它作为回应,而不是评论,这样我就可以接受它。