[英]Java executable jar classpath confusion
我已经阅读了有关可执行jar的答案,并在此处将当前路径添加到classpath中。
我将插件添加到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甚至不需要在您的文件系统上:例如,可以从网络上下载JAR并将其提取到内存中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.