Как исправить «IncompatibleClassChangeError: Реализация класса» при импорте библиотеки Cplex в проект Maven? - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь импортировать Cplex в проект Maven (используя Ubuntu 16.04).

Поэтому я добавил cplex.jar в репозиторий maven с помощью этой команды: mvn install:install-file -DgroupId=cplex -DartifactId=cplex -Dversion=12.8 -Dpackaging=jar -Dfile=/cplex/install/dir/CPLEX_Studio128/cplex/lib/cplex.jar

Я добавилзависимость от моего pom.xml:

<dependency>
    <groupId>cplex</groupId>
    <artifactId>cplex</artifactId>
    <version>12.8</version>
</dependency>

Я добавил ссылку на Cplex Native Library (.so файлы) на LD_LIBRARY_PATH: export LD_LIBRARY_PATH="/cplex/install/dir/CPLEX_Studio128/cplex/bin/x86-64_linux"

Но когда я бегумой проект maven с: mvn exec:java -Dexec.mainClass="main.main"

Я получил следующую ошибку: java.lang.IncompatibleClassChangeError: Реализация класса

Я уже проверил этот вопрос но я не понимаю, в этом случае, какие несовместимые двоичные изменения могут быть сделаны.

Возможно ли, что существуют некоторые "несовместимые двоичные изменения"?И если это не так, есть ли другое объяснение этой ошибки, кроме «несовместимых двоичных изменений»?

Редактировать

Я также использую библиотеку OPL (такая же установка, как в Cplexбиблиотека), и у меня есть только версия 12.8 Cplex и Oplall в моей системе.

Я попытался очистить и собрать снова, но получил ту же ошибку.

Это код, который я пытаюсь запустить(в ModelFileEvaluator.java):

IloOplFactory.setDebugMode(true);
IloOplFactory oplF = new IloOplFactory();
IloOplErrorHandler errHandler = oplF.createOplErrorHandler();
IloOplModelSource modelSource = oplF.createOplModelSource(fileName);
IloOplSettings settings = oplF.createOplSettings(errHandler);
IloOplModelDefinition def = oplF.createOplModelDefinition(modelSource,settings);
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)

1 Ответ

1 голос
/ 28 мая 2019

Использование OPL требует использования oplall.jar.Эта банка не совместима с cplex.jar.Вы можете использовать только один из двух одновременно.Удаление cplex.jar из пути к классам должно исправить проблему.

...