Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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 如何在嵌入式JDK compact 1/2/3中使用log4j_Java_Log4j_Embedded_Java 8 - Fatal编程技术网

Java 如何在嵌入式JDK compact 1/2/3中使用log4j

Java 如何在嵌入式JDK compact 1/2/3中使用log4j,java,log4j,embedded,java-8,Java,Log4j,Embedded,Java 8,我尝试将现有的Java项目移植到嵌入式环境中。但我发现log4j-1.2.14在这种环境下无法工作。因为它与bean有依赖关系 我构建了EJDK8 compact 2环境。有关EJDK8的更多信息: 启动项目时,有以下例外情况 线程“main”java.lang.NoClassDefFoundError中出现异常:java/beans/IntrospectionException [java]位于org.apache.log4j.PropertyConfigurator.parseAppende

我尝试将现有的Java项目移植到嵌入式环境中。但我发现log4j-1.2.14在这种环境下无法工作。因为它与bean有依赖关系

我构建了EJDK8 compact 2环境。有关EJDK8的更多信息:

启动项目时,有以下例外情况

线程“main”java.lang.NoClassDefFoundError中出现异常:java/beans/IntrospectionException [java]位于org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:649) [java]位于org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:612) [java]位于org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:509) [java]位于org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:415) [java]位于org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:441) [java]位于org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:470) [java]位于org.apache.log4j.LogManager.(LogManager.java:122) [java]位于org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66) [java]位于org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270) [java]位于org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281) [java]位于com.truviso.system.Application.(Application.java:36) [java]由以下原因引起:java.lang.ClassNotFoundException:java.beans.IntrospectionException [java]位于java.net.URLClassLoader$1.run(未知源) [java]位于java.net.URLClassLoader$1.run(未知源) [java]位于java.security.AccessController.doPrivileged(本机方法) [java]位于java.net.URLClassLoader.findClass(未知源) [java]位于java.lang.ClassLoader.loadClass(未知源) [java]位于sun.misc.Launcher$AppClassLoader.loadClass(未知源) [java]位于java.lang.ClassLoader.loadClass(未知源) [java]。。。还有11个

阅读log4j源代码后,我发现java.beans有很多依赖项。*。EJDK不支持bean命名空间。在这种情况下,我们可以使用什么样的日志框架?log4j在许多库中被广泛使用。我们还有其他选择吗

在这种情况下,我们可以使用什么样的日志框架?log4j在许多库中被广泛使用。我们还有其他选择吗

嗯,
java.util.logging
在compact1概要文件中,因此这是一个明显的候选者


但是如果您使用的库直接依赖于log4j,那么您就有点卡住了。您要么需要“屠宰”log4j(坏主意),要么需要更改库的日志框架。如果你做了后者,考虑把它改为<代码> SLF4J < /代码>…这将允许您使用各种“后端”日志框架,具体取决于您的应用程序或平台要求。

这种方式似乎有效:

使用jrecreate创建一个新的“完整配置文件”(默认情况下,在未提供任何参数时创建完整配置文件)

将java/bean和com/sun/beans从完整的/lib/rt.jar复制到紧凑的概要文件/lib/rt.jar中


编辑/lib/meta-index文件并添加行“/com/sun/beans”(同样,您可以查看“完整”的meta-index文件并复制该行)

基于某个概要文件的jrecreate构建工具,以提供应用程序中使用的jre。您可以选择最小的封装外形作为compact1、compact2和compact3,并测试您的应用程序。 但有时某些应用程序需要访问更多资源,上述选项包括:

--vm服务器或所有服务器的大小都要高得多

我的案例通过--vm server解决,依赖关系使用java/beans/IntrospectionException

备选解决方案:

$ cd ejdk1.8.0_51
$ export JAVA_HOME=linux_i586/jre
$ ./bin/jrecreate.sh --vm server --dest version-server-jre8

Building JRE using Options {
ejdk-home: /home/bueno/Downloads/ejdk1.8.0_51
    dest: /home/bueno/Downloads/ejdk1.8.0_51/version-server-jre8
    target: linux_i586
    vm: server
    runtime: jre
    debug: false
    keep-debug-info: false
    no-compression: false
    dry-run: false
    verbose: false
    extension: []
}

Target JRE Size is 49.379 KB (on disk usage may be greater).
Embedded JRE created successfully

更多信息:docs.oracle.com/javase/8/embedded/developed-apps-platforms/

我明白了。但是我发现有数千个文件与log4j有依赖关系。我现在有一个解决办法来修复log4j。Log4j依赖java.beans来读取属性文件。所以我可以通过编程方式配置log4j。但是接下来我发现公共配置依赖于公共jxpath,后者与java.beans.FeatureDescriptor有依赖关系。我的上帝。@Yiming-生活就是这样-(您是第一批尝试在新平台(“compact”Java)上使用大量第三方库的人之一)我尝试构建我自己的compact JRE。我将把一些beans代码编织到标准compact 2 JRE中。我发现beans包有很多依赖性。在添加了java.bean.*、com.sun.beans.*和javax.xml.bind.*之后。现在我的JRE可以工作了。总大小仍然是15MB。唯一棘手的是我们需要更新meta-index启用上述名称空间。@Yiming您能用您的解决方案回答您自己的问题吗(添加java.bean.*等)?其他人可能想知道如何让log4j使用java se embedded-compact2