#java #jar #java-web-start
#java #jar #java-web-start
Вопрос:
Мне нужно запустить мое приложение на разных серверах Linux, используя SSH. Я подумал использовать java web start, чтобы я мог один раз упаковать свое приложение и запустить его на серверах путем динамической загрузки приложения. Большая проблема в том, что на сервере не запущен X, и когда я запускаю команду
javaws -Xnosplash
приложение немедленно возвращается без выходных данных.
Есть ли способ получить стандартный вывод / stderr приложения, чтобы понять, что происходит не так?
Редактировать: К сожалению, описание является неполным. Приложение не использует графический интерфейс, оно должно запускаться как приложение командной строки. Мне нужен JWS, потому что я могу использовать разные файлы запуска с большим количеством параметров для целей тестирования, и я могу развернуть приложение один раз и запустить его на нескольких серверах.
Теперь, когда я запускаю его с помощью команды Java, все работает нормально, с javaws команды возвращаются тихо, и я не знаю, что происходит не так.
p.s. Я не вижу никаких журналов в каталоге /.java / *
Комментарии:
1. Не могли бы вы просто запустить его только с java <class files>, чтобы получить стандартный вывод? Источник
2. С Java все работает нормально, с javaws у меня вообще нет выходных данных
Ответ №1:
мы запускаем несколько приложений, которым для корректной работы требуется отображение
В Linux мы с большим успехом используем xvfb.
Я не думаю, что классы AWT / Swing могут инициализировать себя без отображения / фреймбуфера
Комментарии:
1. 1 для xvfb. Вот так я получил приложения Swing (и все, что связано с обработкой графики), работающие в Unix в фоновом режиме. Действительно, AWT / Swing не может инициализировать себя без дисплея / фреймбуфера.
2. Вероятно, это не сработает, потому что Web Start спросит пользователя, следует ли разрешить запуск приложения web start, и он будет вечно ждать щелчка, который не появится.
3. @Робин Грин Затем он может использовать xdotool или другое виртуальное устройство ввода и щелкнуть по нему 😀
4. спасибо, но мне не нужно имитировать X, мне просто нужно знать, почему мое приложение не запущено (p.s. Я не знал xvfb, спасибо)
Ответ №2:
Я бы посоветовал вам использовать OpenJDK — он разделяет большую часть кода с JDK, но использует собственную реализацию Java web start с открытым исходным кодом. Если он еще не поддерживает это, вы, вероятно, можете довольно легко модифицировать его для запуска в текстовом формате.
Комментарии:
1. «вероятно, вы можете довольно легко модифицировать его для запуска в текстовом формате». — можете ли вы определить, что вы подразумеваете под » довольно просто»? То, что вы предлагаете, великолепно, если у человека есть время и технические возможности. Большинству не хватает первого, поскольку им обычно приходится запускать все по расписанию и получать зарплату. Возможно, у парня по имени Оккам есть что сказать по этому поводу. Каким бы интеллектуально стимулирующим ни было это упражнение, более подходящим является простое использование xvfb . Проверено и верно. Экономичный. Широко известен. Лучше, чем модифицировать OpenJDK, вы так не думаете?
2. Зависит от приложения. У меня были приложения JEE, запущенные на машинах, получающих http-запросы и вычисляющие графики для отправки обратно в качестве выходных данных (полагаясь на xvfb в фоновом режиме). Если приложение представляет собой графический интерфейс, то, очевидно, это не сработает. Но, игнорируя их, любое приложение, которому требуется использовать графику (будь то для GUI или для генерации графики), требует присутствия X-сервера.
3. И если рассматриваемое приложение не находится в закрытой форме (без src), обычно дешевле модифицировать приложение для приема сериализованного ввода некоторой формы, чем модифицировать базовую графическую платформу (которая изначально никогда не предназначалась для получения сериализованного ввода).) Подобное изменение OpenJDK звучит как решение проблемы. И эта проблема связана с запуском приложения в среде (и способом), для которого оно не было разработано (недостаточно допустимо, чтобы тратить время и усилия на модификацию jdk IMO.)
Ответ №3:
Есть ли способ получить стандартный вывод / stderr приложения, чтобы понять, что происходит не так?
В Linux Java Web Start (по умолчанию) помещает файлы трассировки в
~/.java/deployment/log/
http://download.oracle.com/javase/1.5.0/docs/guide/deployment/deployment-guide/tracing_logging.html
Комментарии:
1. Это все еще не говорит ему, как инициализировать приложение Swing / AWT, работающее в качестве фонового процесса на компьютере с * nix без запуска X на нем 😉
2. @luis вы, очевидно, правы; я всего лишь отвечал на вопрос «Есть ли способ получить стандартный вывод / stderr приложения, чтобы понять, что происходит не так?» часть.
3. О, моя вина. Я предполагаю, что я не сделал RTFA полностью, прежде чем отвечать: P
4. Не беспокойтесь! Я должен был включить подвопрос, на который я отвечал (исправлено в моей правке).
5. Это странно, я использую sun-java6-jdk, и он не помещает никаких журналов в этот каталог (хотя я пытался создать файл .javawsrc)