2009-07-27 2 views
14

У меня есть Java-программа, с которой я хотел бы работать в любом месте на моей машине. Я хотел бы запустить его из командной строки Cygwin. Я сделал скрипты для вызова java-программы. Я добавил местоположение java-программы в путь к классам, и скрипты работают, когда я запускаю их из каталога java-программы. Однако, когда я пытаюсь запустить из любой другой директории, я получаю:Как запустить java-программу из другого каталога?

java.lang.NoClassDefFoundError: commandprogram/CommandProgram 

Это мой сценарий:

#!/bin/sh 
CWD=`dirname "$0"` 
java -cp "$CWD/classes;$CWD/lib/AJarFile.jar" commandprogram/CommandProgram 

Изменение Java строку следующее:

java -cp "$CWD/classes;$CWD/classes/commandprogram;$CWD/lib/AJarFile.jar" CommandProgram 

производит те же результаты.

+0

вы могли бы разместить свой сценарий, который даст людям лучшее представление о том, где смотреть ... –

+0

не нужно делать Java commandprogram/CommandProgram.class или Java -jar commandprogram/commandProgram .jar? –

+0

isnt 'разделитель путей двоеточие (:) вместо точки с запятой (;), которую вы использовали? –

ответ

3

Перепробовав почти все, что я мог думать, я повторил за команду и пилу что было перемещение путей Cygwin и путей Windows. Решение было изменить сценарий к:

#!/bin/sh 
CWD=`dirname "$0"` 
CWD=`cygpath -w "$CWD"` 
java -cp "$CWD/classes;$CWD/lib/AJarFile.jar" commandprogram/CommandProgram 

Затем УХО изменяется на "C: \ Program Files \ ..." вместо "/ cygdrive/с/Program \ Files/..."

Ранее я столкнулся с этой проблемой и решил ее с помощью решения cygpath -w, но потом немного изменил свой сценарий и не заметил, что проблема с пути вернулась.

20

добавить каталог к ​​пути к классам пример:

java -classpath commandprogram CommandProgram 

или

java -classpath directory_to_program Program 
1

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

Java -cp "$ УХО/классы; $ CWD/Библиотека/AJarFile.jar" commandprogram.CommandProgram

+0

/работает тоже. Имейте в виду, что сценарий работает, когда я вхожу в каталог со сценариями. – Swoogan

-4

Обычный способ запуска Java-файл, чтобы сохранить его в папке Java/Bin и запустить cmd

C:\Program Files\Java\jdk1.7.0_05\bin> javac filename.java && java classname 

Если сохранить файл в другом каталоге, таких как D:, вы можете использовать следующие на ЦМД подсказка:

D:\Project java> set path=%path%;C:Program Files\Java\jdk1.7.0_05\bin 
+7

Сохранение ваших java-файлов или файлов классов в каталоге '' bin '' на самом деле очень необычно и его следует избегать. Каталог Java 'bin' предназначен для собственных двоичных файлов Java и * nothing * else. – Mac

Смежные вопросы