Как я могу определить рабочий каталог, из которого был вызван FATJAR - PullRequest
0 голосов
/ 14 марта 2019

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

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

шаги

  1. cd / build / libs
  2. java -jar .jar --execute script.groovy

запускает Main-Class - класс запуска, который читает аргументы из командной строки.

однако, что вы получаете в качестве имени файла 'script.groovy', и оно должно быть из того же каталога, в котором у меня есть файл jar

Внутри класса / фатжара, однако, если вы посмотрите на

System.getProperty("user.dir")

или

Path path = FileSystems.getDefault().getPath(".").toAbsolutePath()

все они сообщают путь как каталог projectRoot, а не из того места, откуда был запущен сам jar (/ build / libs)

внутри вашего класса, внутри fatjar, как вы определяете каталог, в котором фактически находится fatjar при вызове из командной строки?

1 Ответ

0 голосов
/ 16 июня 2019

Я тоже немного боролся с этим.Вы можете найти некоторые подсказки в StartupInfoLogger.java от весны.Я использую 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");

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

...