Я пытаюсь запустить исполняемый файл jar из файла оболочки. путь моей банки:

/home/flussi/xmlEncoder/encoder.jar

Но я всегда получаю эту ошибку:

    Exception in thread "main" java.lang.NoClassDefFoundError: smaf.encoder.Encoder
   at java.lang.Class.initializeClass(libgcj.so.7rh)
Caused by: java.lang.ClassNotFoundException: java.nio.file.LinkOption not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:/home/flussi/xmlEncoder/encoder.jar], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
   at java.net.URLClassLoader.findClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at java.lang.Class.initializeClass(libgcj.so.7rh)

Команда оболочки

java -jar /home/flussi/xmlEncoder/encoder.jar
0
Giulio Angioli 14 Мар 2018 в 13:35

2 ответа

Лучший ответ

В трассировке стека есть свидетельства того, что вы пытаетесь использовать цепочку инструментов GCJ для запуска этого JAR-файла. (И доказательства в вашем комментарии ниже подтверждают это.)

Это настоящая проблема.

К сожалению, разработка GCJ застопорилась до того, как они завершили поддержку Java 1.5. И похоже, что вы пытаетесь запустить JAR-файл, который зависит от класса Java 1.7 (java.nio.file.LinkOption)

Моя рекомендация:

  • удалите установленные пакеты Java GCJ
  • установите пакеты OpenJDK Java 8 (1.8) или более поздней версии 1 из диспетчера пакетов или загрузите и установите RPM для Java 8 или более поздней версии с сайта Oracle.

Если вы не управляете машиной, попросите менеджеров сделать это. Или попробуйте запустить файл JAR в другом месте.

Скорее всего, потребуется существенная переписать приложение, чтобы оно работало на GCJ. И это было бы напрасной тратой усилий, поскольку GCJ фактически является мертвой платформой Java.


1 - Java 7 будет работать, но пару лет назад она была закрыта.

1
Stephen C 14 Мар 2018 в 12:22

Привет. Лучший способ запустить Java-приложение - сначала установить переменные CLASS_PATH и PATH. Если ваш текущий файл jar зависит от внешних файлов jar, вы столкнетесь с множеством проблем. Лучше установите переменную пути, как показано ниже, и запустите приложение: -

 #!/usr/bin/ksh
 export PATH=/usr/java/bin:$PATH
 # =/usr/java/bin is your java bin folder

 #set environment variable CP with all the jar libraries
 CP=/home/flussi/xmlEncoder/encoder.jar 
 CP=${CP}:/other/jar/somejar.jar

 java -Xmx256M -classpath "$CP" "com.myproj.Example"

Это com.myproj.Example ваш файл класса java внутри encoder.jar, где вы объявили public static void main

0
Abhijit Pritam Dutta 14 Мар 2018 в 11:02