Получить имя исполняемого файла jar из метода main() [дубликат]

На этот вопрос уже есть ответ здесь:

Я создал исполняемый файл jar и использовал commons-cli, чтобы дать пользователю возможность указывать параметры командной строки при запуске клиента. Все работает нормально. Однако, когда я печатаю инструкцию по использованию jar, я хочу показать следующее:

usage: java -jar myprog.jar  
--help Display the help message
--debug Enable debugging
....

Печать всех опций легко выполняется с помощью commons-cli. Тем не менее, строка «использование» — это головная боль. Кажется, я не могу найти способ получить имя «myprog.jar» из аргументов [], которые передаются приложению.

Есть ли простой способ сделать это? Я мог бы использовать довольно запутанный метод для обратной трассировки из загрузчика классов моего класса и выяснить, содержится ли он в банке, но это кажется довольно уродливым ответом на то, что должно быть довольно простым вопросом.

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;
    }
}
29
задан vaxquis 7 December 2014 в 16:11
поделиться