【问题标题】:Problem with incrementally setting up classpath when running a jar file运行 jar 文件时增量设置类路径的问题
【发布时间】:2010-11-06 06:34:53
【问题描述】:

我有一个包含在 A.JAR 中的应用程序。这个 jar 有几个依赖项,因此它们在清单中指定为“lib/B.JAR lib/C.JAR lib/D.JAR”。我有 A.JAR 的安装目录,在它下面有 lib 目录和其他三个。

我转到我的安装目录并运行“java -jar A.JAR”来运行应用程序,它开始运行。但是,它会查找用于设置 log4j 的 log4j.properties。现在据我所知,log4j.properties 需要在类路径中。

现在让我们假设我想运行多个 A.JAR 实例,但具有各种 log4j 属性。因此,我设置了 4 个安装目录(inst1、inst2、...),并将 A.JAR、自定义 log4j.properties 和 lib 目录放在每个目录中。

  1. 这是正确的方法吗(忘记复制本身,我可以使用符号链接来做到这一点)?也许有一种方法可以告诉 log4j 在运行时使用一些定义 (-D) 在特定位置查找属性?
  2. 如果我描述的是一个好的设置,我该如何实际运行它? Java 不会“捕获” log4j.properties 作为其类路径的一部分。运行“java -classpath .-jar A.JAR”也没有帮助。

【问题讨论】:

    标签: java jar classpath


    【解决方案1】:

    您可以使用log4j.configuration 系统属性来定义您希望 log4j 使用的属性文件。

    某个目录中的文件的一个简单示例是:

    java -Dlog4j.configuration=file:/c:/foobar.properties YOUR CLASS PATH -jar JAR FILE
    

    更多信息请查看documentation。特别是检查默认初始化过程部分。

    【讨论】:

    • 还可以查看 -Dlog4j.debug 开关。知道它在哪里寻找可能非常有用。
    • +1 - 这是正确的方法,尽管 OP 可能希望创建一些包装脚本来启动具有不同日志配置的应用程序。
    • @mrrtnn - 太好了,我错过了它,它非常有用。
    • @Stephen - 显然我正在计划一个包装脚本和所有关于自动运行系统的大惊小怪,但是在途中运行第一个实际服务器是非常强制性的;-)
    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2023-04-09
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多