Я создал исполняемую банку и использовал commons-cli, чтобы дать пользователю возможность указывать параметры командной строки при запуске клиента. Все работает нормально. Однако, когда я печатаю заявление об использовании для кувшина, я хотел бы показать следующее:Получить имя исполняемого банку из метода main()
usage: java -jar myprog.jar <options> <file>
--help Display the help message
--debug Enable debugging
....
Печати всех вариантов легко сделать с Викискладом Cli. Тем не менее, строка «использование» является головным скребком. Я не могу понять, как получить имя «myprog.jar» из args [], которое передается приложению.
Есть ли простой способ сделать это? Я мог бы использовать довольно сложный метод для отслеживания следа от класса classloader и выяснить, содержится ли он в банке, но это кажется довольно уродливым ответом на то, что должно быть довольно простым вопросом.
private String getPath(Class cls) {
String cn = cls.getName();
String rn = cn.replace('.', '/') + ".class";
String path =
getClass().getClassLoader().getResource(rn).getPath();
int ix = path.indexOf("!");
if(ix >= 0) {
return path.substring(0, ix);
} else {
return path;
}
}
пытался http://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file?lq=1? – Charles
Я уже видел эту ссылку, но это выглядело так, как будто это был «взлом». Я не могу поверить, что нет более прямого решения. Кроме того, API заявляет, что «getCodeSource()» может возвращать значение NULL, но не уточняет, в каких условиях, поэтому я, естественно, задавался вопросом, использовать ли это «отказоустойчивый» метод. –