Запуск Java из CLI работает нормально, но выполнение того же из SH не заставит Java найти класс

Я пытаюсь запустить сервер Java в Linux, который отлично работает, когда я запускаю его из CLI.

Следующий код работает, если я запускаю его из правильной папки (требуются некоторые файлы, поэтому я не могу выполнить его из другой папки на данный момент):

java -classpath "/var/server/dist/*" net.world.WorldServer

Как только я создаю файл SH с точно таким же кодом в папке и запускаю его с помощью следующей команды:

./launch_server.sh OR bash launch_server.sh

Я получаю следующую ошибку:

Error: Could not find or load main class net.world.WorldServer

Я искал в Google людей, у которых есть похожая проблема, но не смог найти ответ, который помог бы мне с ней.

Следующее, что я пробовал, не помогло;

  1. Задайте CLASSPATH перед выполнением (в файле SH) [export CLASSPATH="/var/server/dist/*"]
  2. Установите CLASSPATH в качестве переменной среды сервера [export CLASSPATH="/var/server/dist/*"]

Моя версия Java:

Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

Версия CentOS:

CentOS release 6.4 (Final) [64-Bit]

Я выполняю все это как «root», и у меня есть полный доступ к серверу.

Если вам нужна дополнительная информация для решения этой проблемы, сообщите мне об этом в комментарии, и я получу информацию как можно быстрее и отредактирую вопрос.

Заранее спасибо! ^_^


person Menno    schedule 25.09.2014    source источник


Ответы (1)


При запуске непосредственно на терминале "/var/server/dist/*" расширяется с помощью bash перед передачей строки в java, поэтому он становится допустимым путем к классам (/var/server/dist/some.jar:/var/server/dist/other.jar... и т. д.).

Чтобы заставить его работать внутри сценария оболочки, вам нужно создать строку пути к классам, что-то вроде

classpath=""
for i in `ls /var/server/dist/*jar`
do 
   classpath=$i:$classpath
done

java -classpath $classpath
person isalgueiro    schedule 25.09.2014
comment
Это работает отлично! Спасибо за ответ, это сэкономило мне много времени! - person Menno; 25.09.2014