在java 7中获取jar的可执行路径

时间:2014-01-17 18:18:15

标签: java-7 executable-jar

在每个人都告诉我这是重复之前,请听我说......

当你需要从正在运行的jar(= path to self)内部的绝对可执行路径时,无论当前的工作目录如何,在过去(Java 6 JRE 1.6),这曾经像魅力一样工作:

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

现在在Java 7(JRE 1.7)中,这只是返回" ./"。如果你想测试它,你需要创建一个可运行的jar,因为从源代码编译时,你将获得预期的路径。

这让我很生气,因为我一直在寻找一个似乎永恒的解决方案。我使用硬编码绝对路径,但显然这意味着jar不可移植。

有谁知道该怎么做?

感谢!!!

1 个答案:

答案 0 :(得分:0)

在导出我的一个旧Java 6项目之后偶然发现了同样的问题,这些项目也使用相同的方法来获取执行路径。 这是一个快速的解决方法(替换' Start.class'与您的班级名称或使用' getClass()'):

String path = Start.class.getProtectionDomain().getCodeSource().getLocation().getPath();
path = new File(rootFolder).getAbsolutePath();

最有可能的是,你最终会得到一个以句号结尾的路径。所以你可能想用以下方法解决这个问题:

if (path.endsWith(".")) path = path.substring(0, path.length() - 1);

在Windows 7 64位和Xubuntu 14.04上使用Oracle JRE 7进行测试