Linha de comandos Java: Erro: Ocorreu um erro JNI / Exceção no segmento “main” java.lang.NoClassDefFoundError

0

Estou tentando compilar / construir / executar um projeto Java pela primeira vez no Ubuntu 14.04. O projeto depende da biblioteca de otimização do CPlex. Eu compilei o código usando

javac -classpath .:/opt/ibm/ILOG/CPLEX_Studio_Community128/cplex/lib/cplex.jar ./bendersexample/*.java

Em seguida, criei um arquivo de manifesto, MANIFEST.MF, que se parece com isso:

Manifest-Version: 1.0
Main-Class: bendersexample.Demo

E então eu criei o .jar assim:

jar -cfm example.jar MANIFEST.MF ./bendersexample/*.class

Eu quero executar meu código executando isto:

java -Djava.library.path=/opt/ibm/ILOG/CPLEX_Studio_Community128/cplex/bin  -jar example.jar

No entanto, recebo o seguinte erro:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: ilog/concert/IloException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: ilog.concert.IloException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

Na verdade, recebo exatamente o mesmo erro quando acabo de executar

java -jar example.jar

Então, eu acho que o problema tem algo a ver com o Java não ser capaz de encontrar a biblioteca? Tenho 100% de certeza de que o caminho dado é onde o CPlex foi instalado.

java -version retorna

java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

e javac -version retornam

javac 1.8.0_161
    
por ellen 23.04.2018 / 05:03

1 resposta

0

Eu dei uma olhada no conteúdo do arquivo .jar e a classe Main foi listada como bendersexample.Demo . Eu estava criando e executando o jar no diretório / bendersexample.

A solução para mim foi simplesmente mover o arquivo Manifest e jar para o diretório pai.

Qualquer um que tenha um problema como esse no futuro deve dar uma olhada na estrutura do arquivo de projeto antes de tentar qualquer outra coisa, porque isso se tornou uma solução muito fácil!

    
por ellen 03.05.2018 / 23:58