Java+Linux+shell

  • Автор теми Автор теми ligorl
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 20.03.2010
Повідом.: 145
Проблема такая
Написал прогу на Java имею jar файл
в Windows создаю bat
в текстовом документе написал start javaw -jar rabota1.2\dist\rabota1.2.jar
и сохранил файл с раcширением bat
запускаю bat и прога моя запускается

Как такое сделать в Linux
Пробовал так в текстовом редакторе пишу
#!/bin/sh

JAVA_HOME=/home/linux1117/jdk1.6.0_21
WORK_DIRECTORY=/rabota1.2/dist
JAR_FILE=$WORK_DIRECTORY/rabota1.2.jar
cd $WORK_DIRECTORY
cmd="nohup $JAVA_HOME/bin/java -jar $JAR_FILE com.my.dist"

и сохранил файл с раcширением sh

Если не так подскажите как правильно пока ниче не получается
Зачем это все надо что б пользователю не заходить в командную строку и ручками писать.Нужен типа EXE или подобное может что то посоветуете.
P.S.:Пойду гуглить дальше :)
 
Могу ошибаться, но че-то меня терзают смутные сомнения по поводу необходимости вот такой строчки в шелл скрипте:

Код:
export JAVA_HOME

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

А еще удобнее, наверное, будет прописать установку значения JAVA_HOME в startup скрипте, чтобы не заморачиваться с ней каждый раз:
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
 
cmd="nohup $JAVA_HOME/bin/java -jar $JAR_FILE com.my.dist"

Проблема в этой строчке - com.my.dist - это должно быть полное название класса, в котором есть функция main. Или укажите правильно название класса типа com.my.dist.Main, или уберите его, если в манифесте jar указан main-класс(а он есть судя по батнику).

Так же не забудьте дать права на выполнение скрипта пользователю.

Удачи.
 
Могу ошибаться, но че-то меня терзают смутные сомнения по поводу необходимости вот такой строчки в шелл скрипте:

Код:
export JAVA_HOME

поскольку в bash, в отличие от виндового cmd.exe, переменные в скрипте являются по умолчанию локальными, и запущенный процесс java без вышеупомянутой строчки переменную JAVA_HOME попросту не увидит.
А вот с этим не согласен. Без export будет работать.
 
А вот с этим не согласен. Без export будет работать.

Если можно уточнить - имеется в виду, все процессы, запущенные из этого скрипта, будут "видеть" переменную и без export? А export нужен, чтобы переменная и ее значение остались "жить" после завершения скрипта?
 
Если можно уточнить - имеется в виду, все процессы, запущенные из этого скрипта, будут "видеть" переменную и без export? А export нужен, чтобы переменная и ее значение остались "жить" после завершения скрипта?

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

Полезно так же добавлять переменный окружения в стартап.
Для этого в файл
~/.bash_profile

нужно добавить

export JAVA_HOME=<путь к установленной java>
export PATH=$PATH:<путь к установленной java>/bin

Для чего тогда устанавливать переменную в скрипте? Очень часто на серверах стоит несколько jdk или jre и для запуска приложений под разными версиями.
 
Если можно уточнить - имеется в виду, все процессы, запущенные из этого скрипта, будут "видеть" переменную и без export? А export нужен, чтобы переменная и ее значение остались "жить" после завершения скрипта?
Нет. Если ты напишешь скрипт, который будет экспортировать переменную VAR, то её значение после завершения скрипта не будет передано в вызывающий шелл.
Для такой цели нужно вызвать скрипт через команду source или просто точка.

т.е
Код:
.   myscrpipt.sh
 
JAVA_HOME=/home/linux1117/jdk1.6.0_21

зачем? почему бы не воспользоваться системной жавой?

JAR_FILE=$WORK_DIRECTORY/rabota1.2.jar

это необязательно, интерпретатор может взять из текущей директории

cmd="nohup $JAVA_HOME/bin/java -jar $JAR_FILE com.my.dist"

эта строка создает переменную cmd и записывает туда строку с подстановкой всех переменных. но где же запуск? нужно заменить на
Код:
nohup $JAVA_HOME/bin/java -jar $JAR_FILE com.my.dist

и сохранил файл с раcширением sh

расширение может быть любым или вообще его не быть, но без разрешения на исполнение из командной строки напрямую оно исполняться не будет (только sh <имя файла>).

P.S. можно попробовать применить высший пилотаж и воспользоваться binfmt, т.е. если настроено определение жавы, то достаточно дать права на исполнение jar-файлу. но это не всегда сделано.
 
Удивительные модераторы удаляют тему "Требуется преподаватель JAVA" из раздела программирование. Интересно куда ее еще можно кинтуь?????)))
Может тут кто поможет с преподавателем???
 
Назад
Зверху Знизу