Java 如何获取已执行jar的绝对路径?

Java 如何获取已执行jar的绝对路径?,java,maven,jar,Java,Maven,Jar,如何获取已执行jar的位置?我找到了很多解决方案,但都不适合我。当我在IDE中运行它们时,一切都很好。只要我构建一个jar文件并使用java-jar myapp.jar运行它,输出就像/…/myapp.jar/foo/bar 我将在myapp.jar中运行代码,而不是在任何库中运行 jar的位置:/home/me/dev/myapp/myapp.jar 预期输出:/home/me/dev/myapp/ 我不想要像使用System.getProperty(“user.dir”)那样的工作目录 我为

如何获取已执行jar的位置?我找到了很多解决方案,但都不适合我。当我在IDE中运行它们时,一切都很好。只要我构建一个jar文件并使用
java-jar myapp.jar
运行它,输出就像
/…/myapp.jar/foo/bar

我将在
myapp.jar
中运行代码,而不是在任何库中运行

jar的位置:
/home/me/dev/myapp/myapp.jar

预期输出:
/home/me/dev/myapp/

我不想要像使用
System.getProperty(“user.dir”)那样的工作目录

我为什么要这样做:

我想在实际的jar旁边存储并加载一个文件。像

/home/me/bin/myapp/myapp.jar
/home/me/bin/myapp/license.key

我希望避免将文件存储到一些通用文件夹中,如
System.getProperty(“user.home”)。我不想将文件存储在jar文件中。

java.nio.file.Paths.get(“.”)。ToAbsolutionPath()将返回到当前目录的绝对路径。

java.nio.file.Paths.get(“.”)。ToAbsolutionPath()将返回到当前目录的绝对路径。

我使用了以下方法:

[YourClass].class.getProtectionDomain().getCodeSource().getLocation().getPath()


关于

我使用了以下内容:

[YourClass].class.getProtectionDomain().getCodeSource().getLocation().getPath()


关于

see@flafoux这些解决方案都没有达到我的预期效果。这里最重要的问题是:你为什么需要这些信息?通常,不需要知道任何JAR文件的位置。事实上,这个问题似乎是一个非常复杂的问题question@Brettetete:您是否将所需的库打包到可执行jar中?请参阅@flafoux这些解决方案都不能提供我预期的输出。这里的总体重要问题是:您为什么需要这些信息?通常,不需要知道任何JAR文件的位置。事实上,这个问题似乎是一个非常复杂的问题question@Brettetete:您是否将所需的库打包到可执行jar中?我在这里引用我的问题:“我不想要工作目录”尝试创建简单的类,该类只打印路径
到标准输出并创建包含此类的jar文件。然后将这个jar文件移动到不同的文件夹并运行
java-jartest.jar
。我看到jar文件所在的目录名打印到了标准输出。我想这就是你想要的。
cd/tmp&&java-jar/home/me/myapp.jar
会导致
/tmp/
-不是我想要的。我想要
/home/me/
我在这里引用我的问题:“我不想要工作目录”尝试创建简单的类,它只打印
路径。get(“.”)。toabsolutionPath()
到stdout并创建包含该类的jar文件。然后将这个jar文件移动到不同的文件夹并运行
java-jartest.jar
。我看到jar文件所在的目录名打印到了标准输出。我想这就是你想要的。
cd/tmp&&java-jar/home/me/myapp.jar
会导致
/tmp/
-不是我想要的。我想要
/home/me/
给我以下结果
文件:/home/me/myapp/myapp.jar/META-INF/类/我正在获取文件:/home/me/myapp/myapp.jar您正在使用什么JRE以及如何打包jar?给我以下结果
文件:/home/me/myapp/myapp.jar/META-INF/类/我正在获取文件:/home/me/myapp/myapp.jar您正在使用什么JRE以及如何打包jar?