Comments 21
а практическая ценность-то? because we can? :)
есть еще, например, такой подход: https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html но даже он мне сомнителен. зачем, если можно просто java -jar или вообще задеплоить куда-то?!
есть еще, например, такой подход: https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html но даже он мне сомнителен. зачем, если можно просто java -jar или вообще задеплоить куда-то?!
>а практическая ценность-то? because we can? :)
Делать консольные приложения/утилиты на джаве. Я именно из-за нового проекта углубился в эту тему, чтобы избежать скрипта на баше рядом с JAR-ом.
Делать консольные приложения/утилиты на джаве. Я именно из-за нового проекта углубился в эту тему, чтобы избежать скрипта на баше рядом с JAR-ом.
Из своего опыта — внутри кода на groovy можно спокойно написать обработчик — потому что это текст. И он будет запускаться ровно как питон или баш. Для именно консольных утилит — это самое то.
#!/какой-то путь/.../groovy — я вот про это, если что
Все остальные продукты как правило все-таки требуют несколько больше настроек, или работают скорее в режиме сервиса, т.е. требуют опять же настройки, чтобы запускаться/останавливаться при перезагрузке ОС в том числе.
#!/какой-то путь/.../groovy — я вот про это, если что
Все остальные продукты как правило все-таки требуют несколько больше настроек, или работают скорее в режиме сервиса, т.е. требуют опять же настройки, чтобы запускаться/останавливаться при перезагрузке ОС в том числе.
Я пишу консольного клиента для УТМ и пишу на джаве, а не на груви. Все настройки хранятся в отдельном файле, которые клиент считывает по заранее известному пути ~/.foo-client/… (как это обычно принято в современном ПО под линукс) Как итог можно просто запускать клиента, как любой другой бинарник, добавив его в PATH.
Так что пусть это и маленькая, но «удобность», особенно для меня как перфекциониста )
Так что пусть это и маленькая, но «удобность», особенно для меня как перфекциониста )
Я вам ровно про такой случай и рассказываю. Вы можете не писать на груви (подставьте сюда что угодно другое, кстати, jython, кложа и т.п. вполне для такого же сценария годятся) основную часть приложения — вы просто заменяете баш на один из скриптовых jvm языков. И это получается очень удобно. У меня был случай, когда примерно 1000 строк шелла были переписаны на груви, сократившись при этом раза в три.
Это всё понятно, но я же пишу на джаве, а не на «подставьте сюда что угодно другое». К тому же скриптовые языки я недолюбливаю.
Напиши запускатор на джаве, потом убери из него все точки с запятой и смени расширение на .groovy)
А когда нужно дописать код, сменить расширение на .java, дописать код, убрать все точки с запятой и снова заменить расширение на .groovy? )
Оу, щит, я же забыл, перед этим нужно добавить точки с запятой, перед переименованием на .java…
Наверное это удобно когда платят застроки кода час, а не когда у вас собственный бизнес.
Оу, щит, я же забыл, перед этим нужно добавить точки с запятой, перед переименованием на .java…
Наверное это удобно когда платят за
Аналогичный вопрос — а зачем? Ну вот зачем нужен dropship, я допустим понимаю. А такой подход — как-то сомнительно. Чего вы хотели добиться по сравнению скажем с произвольно взятым wrapper-ом?
Еще jar-файл можно запускать как скрипт:
$ echo '#!/usr/bin/java -jar' >test.jar
$ cat /path/to/file.jar >>test.jar
$ chmod +x test.jar
$ ./test.jar
эм, а чем вам "jar cvfm ...
" не угодил (это если не перечислять плагины для Maven/Gradle)?
Когда учился еще в институте препод подкинул идею на курсач какраз такого характера. После небольшого мозгового штурма решение получилось крайне простым и удобным, составили и реализовали примерно следующее ТЗ сами себе.
1) Юниксы ищут программу в /bin /sbin /usr/bin и /usr/sbin.
2) Необходимо учесть что программа при запуске может потребовать определенную версию библиотек или jre.
3) Целевая программа должна легко обновляться.
4) Решение которое будет запускать должно быть простым и легким.
Сделали так:
1) определили что конфиги будут лежать в /etc/jarlauncher/
2) сами jar'ники в /usr/jarlauncherbin/
3) Написали на с++ маленькую програмку которая:
-при запуске смотрит какое у нее имя
-по полученному имени пытается найти в /etc/jarlauncher/имя_программы.conf
-если найти не удалось то происходит попытка запуска «java -jar /usr/jarlauncherbin/имя_программы.jar args[]»
-иначе если удалось найти /etc/jarlauncher/имя_программы.conf то в нем следующее:
*jar=«путь до jar» -обязательное
*jre=«путь до java» — опциональное
*classpath=«перечислены библиотеки необходимые для работы» -опциональное
*jreenv=«особые параметры запуска jvm» — опциональное
*logfile=«путь до файла в который проксируется вывод программы» -опционально
-запускает согласно параметров из конфига.
Соответсвенно все что было необходимо это взять эту прогу и скопировать в /usr/bin/, назвать как надо, с таким же названием сделать конфиг с параметрами или положить jar файлик в /usr/jarlauncherbin/. Все предельно тупо и просто но работало отлично и удобно. Позже слышал что кто то из студентов другого курса написал плагин к мавену который автоматизировал все действия.
1) Юниксы ищут программу в /bin /sbin /usr/bin и /usr/sbin.
2) Необходимо учесть что программа при запуске может потребовать определенную версию библиотек или jre.
3) Целевая программа должна легко обновляться.
4) Решение которое будет запускать должно быть простым и легким.
Сделали так:
1) определили что конфиги будут лежать в /etc/jarlauncher/
2) сами jar'ники в /usr/jarlauncherbin/
3) Написали на с++ маленькую програмку которая:
-при запуске смотрит какое у нее имя
-по полученному имени пытается найти в /etc/jarlauncher/имя_программы.conf
-если найти не удалось то происходит попытка запуска «java -jar /usr/jarlauncherbin/имя_программы.jar args[]»
-иначе если удалось найти /etc/jarlauncher/имя_программы.conf то в нем следующее:
*jar=«путь до jar» -обязательное
*jre=«путь до java» — опциональное
*classpath=«перечислены библиотеки необходимые для работы» -опциональное
*jreenv=«особые параметры запуска jvm» — опциональное
*logfile=«путь до файла в который проксируется вывод программы» -опционально
-запускает согласно параметров из конфига.
Соответсвенно все что было необходимо это взять эту прогу и скопировать в /usr/bin/, назвать как надо, с таким же названием сделать конфиг с параметрами или положить jar файлик в /usr/jarlauncherbin/. Все предельно тупо и просто но работало отлично и удобно. Позже слышал что кто то из студентов другого курса написал плагин к мавену который автоматизировал все действия.
А если пожаловаться в мавен, или если хватает сил, даже сразу пулл реквест?
chmod +x foo.bar
Красивый случай победы автокоррекции: не так-то просто убедить человеческие руки, что foo.jar — не ошибка.
А Вы когда-нибудь ядро Linux перекомпилировали самостоятельно?
Я помню, еще в дремучие 2000-е годы (а то и в конце 90-х) при конфигурировании ядра Linux была такая опция: Support for Java binaries.
Если ее включить — то достаточно было потом сделать только «chmod +x MyJavaClass.class» — и он запускался непосредственно, безо всяких скриптов.
С тех пор уже много воды утекло, конечно… но все же, это, часом, не то, что Вы искали?
Я помню, еще в дремучие 2000-е годы (а то и в конце 90-х) при конфигурировании ядра Linux была такая опция: Support for Java binaries.
Если ее включить — то достаточно было потом сделать только «chmod +x MyJavaClass.class» — и он запускался непосредственно, безо всяких скриптов.
С тех пор уже много воды утекло, конечно… но все же, это, часом, не то, что Вы искали?
Вот краткий HOWTO про то, о чем что я писал выше:
http://www.nirendra.net/cms/java/linux
Но если серьезно, то это все игрушки.
Как, например, Вы будете устанавливать максимальный размер кучи, разные системные переменные, настройки GC, режим дебага и т.п.?
http://www.nirendra.net/cms/java/linux
Но если серьезно, то это все игрушки.
Как, например, Вы будете устанавливать максимальный размер кучи, разные системные переменные, настройки GC, режим дебага и т.п.?
Компилировать ядро у каждого пользователя не будешь ) Максимальный размер кучи можно не задавать, JVM самостоятельно сориентируется. Разные системные переменные, настройки GC, режим дебага — уровень systemd (где можно прописать запуск через java -jar ...), а не простых консольных утилит или прикладного ПО.
Ну, а если очень нужно для прикладного ПО, то можно доработать и скажем создавать ~/.foo/env файл во время инсталяции, который будет подхватываться binfmts скриптом (будет определять директорию по имени JAR)
Ну, а если очень нужно для прикладного ПО, то можно доработать и скажем создавать ~/.foo/env файл во время инсталяции, который будет подхватываться binfmts скриптом (будет определять директорию по имени JAR)
Sign up to leave a comment.
Запуск Java классов и JAR-ов не по учебнику