【问题标题】:Java executable jar classpath confusionJava 可执行 jar 类路径混淆
【发布时间】:2013-12-19 02:13:40
【问题描述】:

我已阅读有关可执行 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 classpath


    【解决方案1】:

    我认为. 被评估为相对于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 甚至不需要在您的文件系统上:例如,它可以从网络下载并提取到内存中。

    【讨论】:

      猜你喜欢
      • 2021-01-10
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 2017-07-17
      • 2014-08-09
      • 2017-10-04
      相关资源
      最近更新 更多