我已阅读有关可执行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项。
答案 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甚至不需要在您的文件系统上:例如,它可以从网络下载并在内存中提取。