Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过反射从外部JAR调用方法时的Log4j配置警告_Java_Reflection_Log4j_Invoke - Fatal编程技术网

Java 通过反射从外部JAR调用方法时的Log4j配置警告

Java 通过反射从外部JAR调用方法时的Log4j配置警告,java,reflection,log4j,invoke,Java,Reflection,Log4j,Invoke,我正在调用一个使用反射的方法。为此,在运行时,我: 1) 加载包含声明该方法的类的JAR文件 loader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class urlClass = URLClassLoader.class; Method method = urlClass.getDeclaredMethod("addURL", new Class[]{URL.class}); method.setAccessible(tr

我正在调用一个使用反射的方法。为此,在运行时,我:

1) 加载包含声明该方法的类的JAR文件

loader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class urlClass = URLClassLoader.class;

Method method = urlClass.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);         
method.invoke(lLoader, new Object[] {lJarFile.toURI().toURL()});
lExternalMethod.invoke(lClass.newInstance());
2) 调用该方法

loader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class urlClass = URLClassLoader.class;

Method method = urlClass.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);         
method.invoke(lLoader, new Object[] {lJarFile.toURI().toURL()});
lExternalMethod.invoke(lClass.newInstance());
3) 方法调用可以正常工作,并执行它应该执行的操作,但我在控制台中看到以下内容:

log4j:WARN No appenders could be found for logger (JarName) 
log4j:WARN Please initialize the log4j system properly
我在我的应用程序中不使用log4j,但我正在加载以调用该方法的JAR会使用它。我调用的方法有多行:

Logger.GetLogger().Log("Msg", "Msg description");
此外,JAR还包含log4j.properties文件


有没有办法解决这个问题?

提供一个Log4J配置文件,或者忽略它——这是一个无害的警告,表示没有Log4J配置文件。(是的,有,但显然没有一个定义根附加器等)您应该只在启动时看到该消息。

我无法控制正在加载的jar应用程序,因此我无法修改其中的log4j属性文件(该文件作为构建过程的一部分提供给我,由我的应用程序安装和加载)。我理解这个警告是无害的,但是在控制台上有一条完全不相关的消息不应该被忽略。有什么方法可以修改这个外部jar在运行时使用的log4j文件吗?你真的可以不制作一个log4j配置文件吗?这不是一条无关的消息,您可以忽略它。@Dan:Dave不是要更改jar中内置的log4j配置文件。只要在你的项目中使用所说的jar写下你自己的。@DaveNewton:哈哈,我知道我可以忽略它,我说过我不应该忽略它。它不相关(至少与最终用户无关)。@RyanStewart:将新的log4j配置文件添加到我的应用程序的类路径将优先于外部jar中包含的文件?