与JDK rt.jar

时间:2018-01-05 21:10:23

标签: java jar

几天前我遇到了一个奇怪的问题,我使用JAXB来解组XML文件。所以我写的代码如下。

JAXBContext jaxbContext = JAXBContext.newInstance(XxspPoInHeaderCollection.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); //step1
XxspPoInHeaderCollection poInHeaderCollection = (XxspPoInHeaderCollection) JAXBIntrospector.getValue(jaxbUnmarshaller.unmarshal(file));

所以这是一个有效的代码,然后我在 SVN 中进行了检查。现在从其他系统中我选择了相同的代码,但在该系统上,代码在解组时无法找到任何XML标记。经过几个小时的调试,我发现两种环境都有一些细微差别。在上面的步骤1中,工作系统从 JDK_HOME / jre / lib 中选择rt.jar,而非工作系统从 JRE_HOME / lib 中选择它。所以 jre rt.jar导致了这个问题 我的项目是一个可运行的jar。所以在非工作系统上,当我从任何目录使用java -jar jarName.jar运行它时,它就会导致问题。所以我尝试从 JDK_HOME / bin 运行jar文件(如下所示)并且繁荣......一切都运行正常。

C:\Program Files\Java\jdk1.8.0_91\bin>java -jar "C:\Users\puspender.tanwar\project\850\Adapter-0.0.10-SNAPSHOT.jar"

现在我心里很少有问题:
1.为什么会出现这个问题?为什么rt.jar在JRE和JDK中是不同的 2.我的runnable jar文件依赖于一些我无法放入jar中的文件。在使用上述方法运行它时,我需要将它们保存在 JDK_HOME / bin 下。对此有什么好的方法吗?

1 个答案:

答案 0 :(得分:0)

不确定观察到的行为有什么不同,但我想到的一件事是...

JDK捆绑了(定义的)JAXB版本,而JRE没有。这可能导致JAXB无法在"仅限JRE的计算机上使用"。或者使用类路径中的其他版本。