Java可执行jar类路径混淆

标签 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 术语似乎更容易。

最佳答案

我认为 . 被评估为相对于 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/

相关文章:

java - 在 Java 中获取某个时间段内某个国家/地区的所有推文

java - 无法运行包含依赖项的可执行 jar

java - [TestNG][Jar] 在 list 中设置类路径(类路径)——类路径被忽略?

java - 如何获取运行时类路径上资源的文件句柄?

java - 使用 osgi 访问包内的公共(public)属性文件

java - 如何限制单行字符数?

java - 使用 Java/Apache POI 读取 Excel 并计算总计

Java Spark-如何以多列作为参数调用 UDF

java - 如何将 CardLayout 与 Netbeans GUI Builder 一起使用

java - 多模块 Maven 项目中的不同构建结果