|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Привет! Кажется перепробывал все решения в интернете, но так и не смог получить имя запущенного jar-файла. Все варианты кода приводить не буду, так как результат одинаков, а самый простой вариант ниже. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Результат работы сохраненного этого кода в jar-файл FileName.jar выглядит так Код: java 1.
, а хотелось бы получить строку, содержащую Код: java 1.
. ... Дирректория, из которой вызывается этот файл получается без проблем Код: java 1.
Это, вообще, задача реальная? Или решение в принципе в другом подходе? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 19:56 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Сергей_ТВ Привет! Кажется перепробывал все решения в интернете, но так и не смог получить имя запущенного jar-файла. Все варианты кода приводить не буду, так как результат одинаков, а самый простой вариант ниже. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Результат работы сохраненного этого кода в jar-файл FileName.jar выглядит так Код: java 1.
, а хотелось бы получить строку, содержащую Код: java 1.
. ... Дирректория, из которой вызывается этот файл получается без проблем Код: java 1.
Это, вообще, задача реальная? Или решение в принципе в другом подходе? Вообще реальная Например, так: Main.class.getProtectionDomain().getCodeSource().getLocation() - только 1) нужны проверки на null 2) если приложение упаковано в единый jar (например через spring-boot-maven-plugin :: repackage), то location может указывать на путь внутри архива (в спринге вообще будет составной путь из пути к архиву + пути внутри архива, если не путаю) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 20:12 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Zzz79, достаточно, чтобы он определил свое имя. С локацией проблем нет: папку в которой он расположен без проблем выводит строка Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 20:14 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Осмысленность данного действия не очень понятна А с учетом, что код не обязательно должен лежать на диске и не обязательно в JAR - зачем такой НЕ портируемый велосипед нужен. Можно пойти с другого конца, например: https://docs.oracle.com/javase/6/docs/api/java/lang/management/RuntimeMXBean.html#getInputArguments() https://docs.microsoft.com/en-us/windows/win32/api/processenv/nf-processenv-getcommandlinea в линукс cat /proc/$PPID/cmdline ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 21:11 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Сергей_ТВ, если-бы ты запустил приложение JVizualVM которое показывает овер-дохрена свойств java процессов то ты-бы увидел что свойство sun.java.command которое указывает на локальный путь от текущего фолдера до джарника. Я не спрашиваю зачем тебе это надо. Ведь java процесс может начать бутстрап не только с jar но и с class файла в фолдере среды разработки как это делают IDE для ускорения отладки. А может Graal или Excelsior вообще не заполняют это свойство. Ведь их старт сильно отличается от классической JVM.... Но было-бы очень прикольно если-бы вопросшающие говорили дескыть - Я хочу X для того чтобы Y. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 22:03 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Звучит вопрос "Зачем?" Отвечу: для того, чтобы реализовать в приложении возможность перезагрузки самого себя. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 14:28 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Сергей_ТВ Звучит вопрос "Зачем?" Отвечу: для того, чтобы реализовать в приложении возможность перезагрузки самого себя. Командная строка которым приложение запускалось - самое то. Имени JAR'ника все равно не достаточно. Ведь в нем может быть несколько классов c main методом. Потеряются параметры / настройки JVM переданные в командной строке (а они могут быть важны для корректной работы) и так далее. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 15:11 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Сергей_ТВ Звучит вопрос "Зачем?" Отвечу: для того, чтобы реализовать в приложении возможность перезагрузки самого себя. Обычно реализуют более простой (примитивный) сервис типа watch-dog (сторожевая собака) которая смотрит что процесс живой и стартует если упал. Живой - это например существует mutex в операционке или сокет слушатель от твоего приложения. Почему простой? Потому что надёжность его должна быть выше чем надежность твоего jar-ника. В твоём-же варианте любое изменение jar-ника ставит под вопрос сам факт надёжности механизма перезапуска. Сторожевую собаку можно реализовать на crontab + bashscript ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 16:35 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
mayton механизма перезапуска Вопрос зачем он нужен Например я делал такой механизм для системы автоматического обновления софта в клиент-сервере Скачивалась новая версия из СУБД * во временную папку, запускался "перезапускальшик", происходил выход из приложения, перезапускальшик проверял, что приложение полностью закрыто (на выход из приложения тоже требуется время) и копировал файлы приложения, запускал новую версию приложения Но ничего определять мне не требовалось. Т.к. имя своей собственной программы я и так знал ))) /да и файлов там было значительно больше одного/ * upgrade системы, в том числе и обновления кода клиента, происодило через SQL скрипт (INSERT'ами) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 16:46 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
В процессе обновления "запускальщиком" является сам пользователь. Но здесь надо знать детали. Потому-что проблема которую я описал приводик к потенциальной невозможности перезапустить приложение Сергея самому приложению. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 16:51 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Сергей_ТВ Звучит вопрос "Зачем?" Отвечу: для того, чтобы реализовать в приложении возможность перезагрузки самого себя. Зачем?! Когда есть Kubernetes + Docker. <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 08:53 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
mad_nazgul Сергей_ТВ Звучит вопрос "Зачем?" Отвечу: для того, чтобы реализовать в приложении возможность перезагрузки самого себя. Зачем?! Когда есть Kubernetes + Docker. <:o) Ты ему средства, а он так и не ответил на "зачем" - после глюка - апдейт - перезагрузка Оси Мммм. Дальше придумать не могу))) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 09:44 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Мой сценарий полностью исключает ситуацию когда после наката обновлений "всё упало все пропало" и автоматизация не работает. И нужно ручное участие админов чтоб поправить все рабочие станции предприятия или корпорации. Их может быть десятки тысяч что само по себе доставляет lulz. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 10:04 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mad_nazgul пропущено... Зачем?! Когда есть Kubernetes + Docker. <:o) Ты ему средства, а он так и не ответил на "зачем" - после глюка - апдейт - перезагрузка Оси Мммм. Дальше придумать не могу))) Дык kubernetes как раз и предназначен, чтобы быстро поднять, то что "упало" :-) Правда, возможно для ТС это будет оверхэд. Вполне возможно достаточно правильно настроить unit в Systemd для приложения. Грубо говоря, может быть надо в начале посмотреть на существующие решения, для "поднятия" приложения если что-то случилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 12:12 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
mad_nazgul Дык kubernetes как раз и предназначен, чтобы быстро поднять, то что "упало" :-) Правда, возможно для ТС это будет оверхэд. Мне кажется что будет неправдой говорить что это его предназначение. У кубера много предназначений и не все из них автору нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 12:17 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
mayton mad_nazgul Дык kubernetes как раз и предназначен, чтобы быстро поднять, то что "упало" :-) Правда, возможно для ТС это будет оверхэд. Мне кажется что будет неправдой говорить что это его предназначение. У кубера много предназначений и не все из них автору нужны. Я и говорю, что kubernetes может быть overhead. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 14:27 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2020, 00:45 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Sergunka ИМХО если есть возможность не использовать это, то лучше не использовать. Вещь интересная, но очень "капризная". Для примера можно поставить Eclipse и кучу сторонних плагинов, а потом наслаждаться постоянными зависаниями и падениями. Стандартные плагины в Eclipse сейчас более-менее вылизаны и не приводят к падению. Хотя лет 5-7 назад, и они могли уронить Eclipse. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2020, 06:24 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
OSGI, java-security. Все эти хештеги потеряли смысл после после того как наметился тренд на отказ от дорогого и мощного железа в пользу облак где инстанция поднимается в 2 мышко-клика и далее сама инстанция упрощается от полноценного Linux-stack до контейнера, сервиса и просто функкции. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2020, 10:04 |
|
Как получить имя исполняемого jar файла
|
|||
---|---|---|---|
#18+
Благодарю всех откликнувшихся! За то, что уделили внимание! Хотя по правде сказать - ответы не помогли. Полагаю из-за того, что я пока не дорос до мега задач, решения которых предлагались. Оказалось, что путь нормально определяется тем кодом что написан выше, если сделать экспорт именно Jar file (см скиншот ниже), а не Runnable Jar file, который я делал и получал Код: java 1.
[img=Screen Shot 2020-06-16 at 9.22.39 PM.png] ... Возвращаясь к вопросу "Зачем", именно за тем, как ответил в первый раз. А делать выводы об осмысленности такого предназначения равно популярному ответу несведущих "поищи в интернете". Но это так, для того, чтобы улыбнулись. Я Вам все равно благодарен. И опубликовал новый вопрос в новой теме (Как измененить отображаемое имя основного класса Jar file). Сможете помочь? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2020, 20:53 |
|
|
start [/forum/topic.php?fid=59&msg=39968474&tid=2120778]: |
0ms |
get settings: |
23ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
376ms |
get tp. blocked users: |
2ms |
others: | 321ms |
total: | 804ms |
0 / 0 |