Невозможно выполнить файл JAR, несмотря на то, что PATH и CLASSPATH установлены - PullRequest
6 голосов
/ 03 ноября 2011

Мой вопрос касается включения файлов JAR в путь. Имеет 2 части.

1) Я пытаюсь выполнить файл jar weka.jar, расположенный в /home/andy/software/weka/weka.jar

Переменная PATH указывает на этот файл jar (то есть на /home/andy/software/weka/weka.jar), как и CLASSPATH.

Однако, когда я пытаюсь запустить jar с помощью java -jar weka.jar, я получаю сообщение об ошибке «Невозможно получить доступ к jarfile weka.jar».

Есть идеи, что происходит? Я на Ubuntu Linux. Я посмотрел вокруг в SO, и кажется, что я не делаю ничего, что явно неправильно (так как PATH и CLASSPATH, кажется, установлены правильно).

2) Я хотел бы иметь возможность поместить все мои файлы JAR в один каталог и включить этот каталог в мой путь (вместо того, чтобы включать каждый файл JAR по отдельности). Как я могу это сделать?

Заранее спасибо.

РЕДАКТИРОВАТЬ 1 -> Вот моя командная строка

andy@laptop:~$ export CLASSPATH=$CLASSPATH:/home/andy/research/software/weka/weka.jar
andy@laptop:~$ echo $CLASSPATH
:/home/andy/research/software/weka/weka.jar
andy@laptop:~$ java -jar weka.jar
Unable to access jarfile weka.jar
andy@laptop:~$ java weka.jar
Exception in thread "main" java.lang.NoClassDefFoundError: weka/jar
Caused by: java.lang.ClassNotFoundException: weka.jar
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: weka.jar.  Program will exit.
andy@laptop:~$ 

РЕДАКТИРОВАТЬ 2 -> Я изменил переменную PATH так, чтобы она указала на каталог '/ home / andy / research / software / weka /', и все еще не могу получить доступ к ошибке jarfile

Ответы [ 5 ]

9 голосов
/ 03 ноября 2011

1) -jar опция java отключает использование CLASSPATH. Пожалуйста, посмотрите на Настройка CLASSPATH Weka

2) Записи пути к классу могут содержать подстановочный знак базового имени , что считается эквивалентным указанию списка всех файлов в каталоге с расширением .jar или .JAR. Например, запись пути к классу foo / указывает все файлы JAR в каталоге с именем foo. Запись пути к классу, состоящая просто из *, расширяется до списка всех файлов JAR в текущем каталоге. Взгляните на Настройка пути к классам

4 голосов
/ 04 ноября 2011

Вы не выполняете как

 java -jar weka.jar

Вместо этого вы даете имя одному из классов INSIDE jar.

простой пример без установки classpath:

 java -jar /home/andy/research/software/weka/weka.jar weka.core.SystemInfo

простой пример с использованием set classpath:

 export CLASSPATH=$CLASPATH:/home/andy/research/software/weka/weka.jar

 java weka.core.SystemInfo

Более сложный пример:

export WEKA_HOME=/home/andy/research/software/weka/

export CLASSPATH=$CLASPATH:$WEKA_HOME/weka.jar

export HEAP_OPTION=-Xms4096m -Xmx8192m
export JAVA_COMMAND=java $HEAP_OPTION

$JAVA_COMMAND weka.core.SystemInfo
1 голос
/ 03 ноября 2011

Невозможно получить доступ * .jar означает, что java не может найти этот файл jar.Вам следует либо запустить эту команду (java -jar weka.jar) из папки, где находится ваш jar, либо исправить переменную PATH.Он должен указывать на ПАПКУ, где находится баночка, а не на файл баночки напрямую.

1 голос
/ 03 ноября 2011

Когда jar находится в пути к классам, это означает, что библиотека доступна для jvm.Если вы хотите запустить JAR-файл (выполнить его основной), вам все равно нужно указать правильный путь к файлу.

0 голосов
/ 09 мая 2013

при условии, что вы находитесь в той же папке, что и weka.jar, все что вам нужно - это ./ перед именем фляги

java -jar ./weka.jar weka.core.SystemInfo
...