- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个可运行的 jar 文件。
我在同一目录中有一个 log4j.xml 文件。
我的类路径包括“.”
env |grep CLASS
CLASSPATH=.;C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip
但是当我运行 java -jar myrunnable.jar
时,我收到以下消息。
log4j:WARN No appenders could be found for logger (org.apache.commons.configuration.PropertiesConfiguration).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
奇怪的是,如果我将该 jar 包装在 launch4j 可执行文件中,它会看到 log4j.xml 文件并使用它。
我确实访问了错误消息中提到的常见问题解答页面。内容如下:
This occurs when the default configuration files log4j.properties and log4j.xml can not be found and the application performs no explicit configuration. log4j uses Thread.getContextClassLoader().getResource() to locate the default configuration files and does not directly check the file system. Knowing the appropriate location to place log4j.properties or log4j.xml requires understanding the search strategy of the class loader in use.
我有点不知所措,我需要做什么才能让我的可运行 jar 看到 log4j.xml 缺少添加 -Dlog4j.configuration=file:\\\\my\crazy\long\path\to\my\eclipse\workspace\target\directory\log4j.xml
到命令行,这是一个要输入的 PITA。
如果我尝试类似 java -Dlog4j.debug -Dlog4j.configuration=.\\log4j.xml -jar myrunnable.jar
log4j: Trying to find [.\\log4j.xml] using context classloader sun.misc.Launcher $AppClassLoader@265f00f9.
log4j: Trying to find [.\\log4j.xml] using sun.misc.Launcher$AppClassLoader@265f00f9 class loader.
log4j: Trying to find [.\\log4j.xml] using ClassLoader.getSystemResource().
log4j: Could not find resource: [.\\log4j.xml].
log4j.xml
和 ./log4j.xml
的不同组合结果相同
如果它有所不同,这是通过标准 slf4j-log4j 绑定(bind)使用 log4j 的 windows 7/java 7/64 位。
补充说明:
java -cp .
失败java -cp .\\
根据下面 Dave Newton 的回答,我更改了我的 MANIFEST.MF 文件以包含以下行:
Class-Path: ./
有了这个,我的 log4j.xml 文件就可以正常显示了。我正在使用 Maven Shade 插件构建 jar 文件,因此添加类路径条目是配置 ManifestResourceTransformer 的问题。 .
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>my.runnable.Class</mainClass>
<manifestEntries>
<Class-Path>./</Class-Path>
</manifestEntries>
</transformer>
我说“有点”已解决,因为虽然它确实输出了从我想要的 log4j.xml 文件配置的日志记录信息,但这意味着将该路径硬编码到我的 jar 中,任何使用我的 jar 的人都必须在其中包含 log4j.xml 或 log4j.properties安装目录。我希望有一个更好的解决方案来提供标准和预期的结果(log4j.xml/log4j.properties 文件可以放在类路径中的任何位置),但是根据我今天所做的所有搜索,它似乎并不是情况。
我认为我遇到了另一个令人沮丧的问题,其中 Java 的行为并不直观,除了非常简单地解释它为何如此行为之外,任何事情都需要阅读整本书。
最佳答案
当您使用 -jar 时,类路径将被忽略。
您可以将配置文件添加到 list 的 Class-Path
条目中,但请考虑提供路径。它可能需要是一个文件资源,否则它可能会尝试在 jar 的类路径值中找到它。
关于java - 找不到当前目录中的 log4j.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17202874/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!