java 线上运行任务时,读取当前jar包所在的目录信息

631 阅读1分钟

Java程序在本地运行时,可以通过System.getProperty("user.dir")获取当前工程所在的目录信息。但是,当将该工程放置在线上环境运行时,将返回其他的路径。以Flink程序为例,该语句将会返回${FLINK_HOME}/bin。很显然,这并不是我们想要的。通过阅读(java获取当前jar包所在目录),我们可以将对Jar包路径的获取封装成一个方法,如果需要访问Jar中的配置文件时候,可以通过拼接路径的方式完成配置文件的读取工作。

public String getPath() {
    String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
    if(System.getProperty("os.name").contains("dows")) {
        path = path.substring(1,path.length());
    }
    if(path.contains("jar")) {
        path = path.substring(0,path.lastIndexOf("."));
        return path.substring(0,path.lastIndexOf("/"));
    }
    return path.replace("target/classes/", "");
}