Я запускаю файл jar в разных местах, и я пытаюсь выяснить, как получить местоположение файла jar, который запущен.
Как получить каталог, в котором находится исполняемый файл jar?
Ответ 1
Не идеальное решение, но это вернет расположение базы кода класса:
getClass().getProtectionDomain().getCodeSource().getLocation()
Ответ 2
new File(".").getAbsolutePath()
Ответ 3
Вот мой способ получить путь выполнения из любого места
private static String GetExecutionPath(){
String absolutePath = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
absolutePath = absolutePath.substring(0, absolutePath.lastIndexOf("/"));
absolutePath = absolutePath.replaceAll("%20"," "); // Surely need to do this here
return absolutePath;
}
Ответ 4
Рассмотрим следующую функцию
//This method will work on Windows and Linux as well.
public String getPath(){
URL rootPath = getClass().getResource("");
String URI=rootPath.toString().substring(9);
String[] currentPath=URI.split("myjar.jar!");
currentPath[0]=currentPath[0].replaceAll("%20"," ");
return currentPath[0];
}
Ответ 5
Кажется, это вопрос, который нужно начинать с самого начала.
Если я запускаю код в Java, он заканчивается из rt.jar и, возможно, еще дюжины других банок.
Самые первые файлы для запуска будут на самом деле находиться в rt.jar, rt.jar, который вызывает ваш основной.
Если вы пишете класс, который позволяет вам рассказать, какой jar вы используете, и этот класс перемещается в другую банку, то вы больше не "исчерпаете" банку, в которой больше всего находится ваш основной.
Я думаю, что вам нужна командная строка, которая запустила ваше приложение, но если вы сначала поместите CD в каталог, тогда у него может не быть полного пути к вашей банке.
Кроме того, вы не можете запускать из банки - кто-то мог бы расширить вашу банку на классы в каталоге и запускать ее таким образом.
Лично я просто закрою вашу программу в оболочке script launcher, где вы можете посмотреть ваше текущее местоположение и местоположение файла jar, а затем передать их в java.