Как запустить 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