Java可执行jar类路径混淆

时间:2013-12-19 02:13:40

标签: java classpath

我已阅读有关可执行jar的答案并将当前路径添加到类路径here

我将插件添加到pom.xml,我检查了这行,实际上已添加到MANIFEST.MF:

Class-Path: .

现在根据log4j2文档,它将查看log4j2.xml文件的当前类路径。

我的理解是,如果我将log4j2.xml放在与jar相同的目录中,并在我进入该目录时执行jar,那么它将找到log4j2.xml。

但是,只有在我添加

时才会找到它
-Dlog4j.configurationFile=/path/to/file

到java命令。

我错过了什么?

坦率地说,忘记类路径的东西似乎更容易,只需在java命令行中添加一堆-D项。

1 个答案:

答案 0 :(得分:0)

我认为.被评估为相对于java进程当前工作目录的当前目录(当OS启动进程时,它们被赋予工作目录)。您可以通过查看系统属性user.dir来查看运行程序的JVM的工作目录。

# current directory is /home/rick
$pwd
/home/rick
# the code archive is not in the current wd
$ls /home/rick/myapps
app.jar
# the conf file is
$ls .
log4j2.xml
# This will work as expected
$java -jar /home/rick/myapps/app.jar

严格地说,JAR甚至不需要在您的文件系统上:例如,它可以从网络下载并在内存中提取。