как я могу определить рабочий каталог, из которого был вызван fatjar

#fatjar #working-directory

#fatjar #рабочий каталог

Вопрос:

У меня есть проект, который я превратил в fatjar. Gradle загружает это в /build/libs

Я перешел в этот каталог и вызвал fatjar с файлом в качестве параметра.

шаги

  1. cd /build /libs
  2. 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»);

Проверьте, какой из них может быть вам полезен.