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/", "");
}