我已经阅读了关于可执行 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 术语似乎更容易。
最佳答案
我认为 .
被评估为相对于 java
进程当前工作目录的当前目录(当进程由操作系统启动时,它们被赋予一个工作目录) .您可以通过检查程序中的系统属性 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 甚至不需要在您的文件系统上:例如,它可以从网络上下载并在内存中提取。
关于Java可执行jar类路径混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20672264/