powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как получить имя исполняемого jar файла
20 сообщений из 20, страница 1 из 1
Как получить имя исполняемого jar файла
    #39967556
Сергей_ТВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Кажется перепробывал все решения в интернете, но так и не смог получить имя запущенного jar-файла.
Все варианты кода приводить не буду, так как результат одинаков, а самый простой вариант ниже.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
import java.io.File;
import java.net.URL;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		URL pathApp = Main.class.getProtectionDomain().getCodeSource().getLocation();
		File execFile = new File(pathApp.toString());
		System.out.println("pathApp : " + pathApp);
	}

}



Результат работы сохраненного этого кода в jar-файл FileName.jar выглядит так
Код: java
1.
"rsrc:./"

, а хотелось бы получить строку, содержащую
Код: java
1.
"FileName.jar"

.
...
Дирректория, из которой вызывается этот файл получается без проблем
Код: java
1.
 System.getProperty( "user.dir") 



Это, вообще, задача реальная?
Или решение в принципе в другом подходе?
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39967560
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей_ТВ
Привет!
Кажется перепробывал все решения в интернете, но так и не смог получить имя запущенного jar-файла.
Все варианты кода приводить не буду, так как результат одинаков, а самый простой вариант ниже.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
import java.io.File;
import java.net.URL;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		URL pathApp = Main.class.getProtectionDomain().getCodeSource().getLocation();
		File execFile = new File(pathApp.toString());
		System.out.println("pathApp : " + pathApp);
	}

}



Результат работы сохраненного этого кода в jar-файл FileName.jar выглядит так
Код: java
1.
"rsrc:./"

, а хотелось бы получить строку, содержащую
Код: java
1.
"FileName.jar"

.
...
Дирректория, из которой вызывается этот файл получается без проблем
Код: java
1.
 System.getProperty( "user.dir") 



Это, вообще, задача реальная?
Или решение в принципе в другом подходе?


Вообще реальная
Например, так:
Main.class.getProtectionDomain().getCodeSource().getLocation() - только
1) нужны проверки на null
2) если приложение упаковано в единый jar (например через spring-boot-maven-plugin :: repackage), то location может указывать на путь внутри архива (в спринге вообще будет составной путь из пути к архиву + пути внутри архива, если не путаю)
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39967562
Сергей_ТВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79, достаточно, чтобы он определил свое имя.
С локацией проблем нет: папку в которой он расположен без проблем выводит строка

Код: java
1.
 System.getProperty( "user.dir") 
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39967583
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осмысленность данного действия не очень понятна

А с учетом, что код не обязательно должен лежать на диске и не обязательно в 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
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39967606
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей_ТВ, если-бы ты запустил приложение JVizualVM которое показывает овер-дохрена свойств java
процессов то ты-бы увидел что свойство sun.java.command которое указывает на локальный путь от текущего фолдера
до джарника.

Я не спрашиваю зачем тебе это надо. Ведь java процесс может начать бутстрап не только с jar но и с class файла
в фолдере среды разработки как это делают IDE для ускорения отладки. А может Graal или Excelsior вообще не заполняют
это свойство. Ведь их старт сильно отличается от классической JVM....

Но было-бы очень прикольно если-бы вопросшающие говорили дескыть - Я хочу X для того чтобы Y.
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39967882
Сергей_ТВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Звучит вопрос "Зачем?" Отвечу: для того, чтобы реализовать в приложении возможность перезагрузки самого себя.
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39967900
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей_ТВ
Звучит вопрос "Зачем?" Отвечу: для того, чтобы реализовать в приложении возможность перезагрузки самого себя.

Командная строка которым приложение запускалось - самое то.

Имени JAR'ника все равно не достаточно. Ведь в нем может быть несколько классов c main методом. Потеряются параметры / настройки JVM переданные в командной строке (а они могут быть важны для корректной работы) и так далее.

IMHO
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39967937
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей_ТВ
Звучит вопрос "Зачем?" Отвечу: для того, чтобы реализовать в приложении возможность перезагрузки самого себя.

Обычно реализуют более простой (примитивный) сервис типа watch-dog (сторожевая собака)
которая смотрит что процесс живой и стартует если упал. Живой - это например существует
mutex в операционке или сокет слушатель от твоего приложения.

Почему простой? Потому что надёжность его должна быть выше чем надежность твоего jar-ника.

В твоём-же варианте любое изменение jar-ника ставит под вопрос сам факт надёжности
механизма перезапуска.

Сторожевую собаку можно реализовать на crontab + bashscript
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39967941
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
механизма перезапуска

Вопрос зачем он нужен

Например я делал такой механизм для системы автоматического обновления софта в клиент-сервере

Скачивалась новая версия из СУБД * во временную папку, запускался "перезапускальшик", происходил выход из приложения, перезапускальшик проверял, что приложение полностью закрыто (на выход из приложения тоже требуется время) и копировал файлы приложения, запускал новую версию приложения

Но ничего определять мне не требовалось. Т.к. имя своей собственной программы я и так знал ))) /да и файлов там было значительно больше одного/

* upgrade системы, в том числе и обновления кода клиента, происодило через SQL скрипт (INSERT'ами)
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39967943
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В процессе обновления "запускальщиком" является сам пользователь.

Но здесь надо знать детали. Потому-что проблема которую я описал
приводик к потенциальной невозможности перезапустить приложение Сергея
самому приложению.
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39968109
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей_ТВ
Звучит вопрос "Зачем?" Отвечу: для того, чтобы реализовать в приложении возможность перезагрузки самого себя.


Зачем?!
Когда есть Kubernetes + Docker.
<:o)
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39968123
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Сергей_ТВ
Звучит вопрос "Зачем?" Отвечу: для того, чтобы реализовать в приложении возможность перезагрузки самого себя.


Зачем?!
Когда есть Kubernetes + Docker.
<:o)

Ты ему средства, а он так и не ответил на "зачем"
- после глюка
- апдейт
- перезагрузка Оси
Мммм. Дальше придумать не могу)))
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39968130
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой сценарий полностью исключает ситуацию когда после наката обновлений "всё упало все пропало"
и автоматизация не работает. И нужно ручное участие админов чтоб поправить все рабочие станции
предприятия или корпорации. Их может быть десятки тысяч что само по себе доставляет lulz.
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39968179
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mad_nazgul
пропущено...


Зачем?!
Когда есть Kubernetes + Docker.
<:o)

Ты ему средства, а он так и не ответил на "зачем"
- после глюка
- апдейт
- перезагрузка Оси
Мммм. Дальше придумать не могу)))


Дык kubernetes как раз и предназначен, чтобы быстро поднять, то что "упало" :-)
Правда, возможно для ТС это будет оверхэд.
Вполне возможно достаточно правильно настроить unit в Systemd для приложения.

Грубо говоря, может быть надо в начале посмотреть на существующие решения, для "поднятия" приложения если что-то случилось.
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39968181
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul

Дык kubernetes как раз и предназначен, чтобы быстро поднять, то что "упало" :-)
Правда, возможно для ТС это будет оверхэд.

Мне кажется что будет неправдой говорить что это его предназначение. У кубера много предназначений
и не все из них автору нужны.
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39968255
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
mad_nazgul

Дык kubernetes как раз и предназначен, чтобы быстро поднять, то что "упало" :-)
Правда, возможно для ТС это будет оверхэд.

Мне кажется что будет неправдой говорить что это его предназначение. У кубера много предназначений
и не все из них автору нужны.


Я и говорю, что kubernetes может быть overhead. :-)
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39968443
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://en.wikipedia.org/wiki/OSGi

Вроде как уже двадцать лет стандарту.
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39968452
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergunka
https://en.wikipedia.org/wiki/OSGi

Вроде как уже двадцать лет стандарту.


ИМХО если есть возможность не использовать это, то лучше не использовать.
Вещь интересная, но очень "капризная".
Для примера можно поставить Eclipse и кучу сторонних плагинов, а потом наслаждаться постоянными зависаниями и падениями.
Стандартные плагины в Eclipse сейчас более-менее вылизаны и не приводят к падению.
Хотя лет 5-7 назад, и они могли уронить Eclipse.
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39968474
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OSGI, java-security. Все эти хештеги потеряли смысл после после того как наметился тренд на отказ
от дорогого и мощного железа в пользу облак где инстанция поднимается в 2 мышко-клика и далее
сама инстанция упрощается от полноценного Linux-stack до контейнера, сервиса и просто функкции.
...
Рейтинг: 0 / 0
Как получить имя исполняемого jar файла
    #39969945
Сергей_ТВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю всех откликнувшихся! За то, что уделили внимание! Хотя по правде сказать - ответы не помогли. Полагаю из-за того, что я пока не дорос до мега задач, решения которых предлагались. Оказалось, что путь нормально определяется тем кодом что написан выше, если сделать экспорт именно Jar file (см скиншот ниже), а не Runnable Jar file, который я делал и получал

Код: java
1.
"rsrc:./"


[img=Screen Shot 2020-06-16 at 9.22.39 PM.png]

...
Возвращаясь к вопросу "Зачем", именно за тем, как ответил в первый раз. А делать выводы об осмысленности такого предназначения равно популярному ответу несведущих "поищи в интернете". Но это так, для того, чтобы улыбнулись. Я Вам все равно благодарен. И опубликовал новый вопрос в новой теме (Как измененить отображаемое имя основного класса Jar file). Сможете помочь?
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как получить имя исполняемого jar файла
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]