Как запустить java-программу из другого каталога?
У меня есть java-программа, которую я хотел бы запускать из любой точки моей машины. Я хотел бы запустить его из командной строки Cygwin. Я сделал скрипты для вызова java-программы. Я добавил местоположение java-программы в путь к классам, и скрипты работают, когда я запускаю их из каталога программы java. Однако, когда я пытаюсь запустить из любого другого каталога, я получаю:
java.lang.NoClassDefFoundError: commandprogram/CommandProgram
Это мой script:
#!/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
дает те же результаты.
Ответы
Ответ 1
Попробовав почти все, о чем я мог думать, я повторил команду и увидел, что происходит смешивание путей Cygwin и путей Windows. Решение заключалось в том, чтобы изменить script на:
#!/bin/sh
CWD=`dirname "$0"`
CWD=`cygpath -w "$CWD"`
java -cp "$CWD/classes;$CWD/lib/AJarFile.jar" commandprogram/CommandProgram
Затем CWD изменился на "C:\Program Files \..." вместо "/cygdrive/c/Program\Files/..."
Ранее я столкнулся с этой проблемой и решил ее с помощью решения cygpath -w
, но потом немного изменил свой script и не заметил, что проблема пути вернулась.
Ответ 2
добавьте свой каталог в пример пути к классам:
java -classpath commandprogram CommandProgram
или
java -classpath directory_to_program Program
Ответ 3
вам нужно использовать точку для разделения пакетов, а не слэш.
java -cp "$ CWD/classes; $CWD/lib/AJarFile.jar" commandprogram.CommandProgram
Ответ 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