0

我有一个项目,我把它做成了一个 fatjar。Gradle 将其放入 /build/libs

我已经进入这个目录并使用一个文件作为参数调用了 fatjar。

脚步

  1. cd /构建/库
  2. java -jar .jar --执行脚本.groovy

这将启动 Main-Class - 一个从命令行读取 args 的启动器类。

但是,您得到的文件名是“script.groovy”,这应该与我拥有 jar 文件的目录相同

但是,如果您在类 /fatjar 中查看

System.getProperty("user.dir")

或者

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

他们都将路径报告为 projectRoot 目录 - 而不是 jar 本身的运行位置(/build/libs)

在你的类中,在 fatjar 中,当从命令行调用时,你如何确定 fatjar 实际所在的目录?

4

1 回答 1

0

我在这方面也有些挣扎。您可以在 Spring 的 StartupInfoLogger.java 中找到一些提示。我使用的是 2.1.5 spring boot 版本。

这是一些示例代码。

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");

检查其中哪一个对您有用。

于 2019-06-16T08:46:48.887 回答