#fatjar #working-directory
#fatjar #рабочий каталог
Вопрос:
У меня есть проект, который я превратил в fatjar. Gradle загружает это в /build/libs
Я перешел в этот каталог и вызвал fatjar с файлом в качестве параметра.
шаги
- cd /build /libs
- java -jar .jar —выполнить скрипт.groovy
при этом запускается класс запуска Main-Class — a, который считывает аргументы из командной строки.
однако в качестве имени файла вы получаете ‘script.groovy’, и он должен быть из того же каталога, что и у меня с файлом jar
Однако внутри класса / fatjar, если вы посмотрите на
System.getProperty("user.dir")
или
Path path = FileSystems.getDefault().getPath(".").toAbsolutePath()
все они сообщают путь как каталог projectRoot, а не откуда был запущен сам jar (/build / libs)
внутри вашего класса, внутри fatjar, как вы определяете каталог, в котором фактически находится fatjar, при вызове из командной строки?
Ответ №1:
Я также немного боролся с этим. Вы можете найти некоторые подсказки в StartupInfoLogger.java из spring. Я использую версию spring boot 2.1.5.
Вот несколько примеров кода.
public class MyTestFatJarMainClass {
public static void main(String[] args) {
SpringApplication.run(MyTestFatJarMainClass.class, args);
// The needed code start below
// The class is MyTestFatJarMainClass.class, but it can be any class in your app
ApplicationHome home = new ApplicationHome(MyTestFatJarMainClass.class);
String path = (home.getSource() != null) ? home.getSource().getAbsolutePath() : "";
// Now you got the path, it contains the jar file itself.
System.out.println("DINDA " s " path " path);
}
}
Вы также можете прочитать String property = System.getProperty(«user.dir»);
Проверьте, какой из них может быть вам полезен.