编程语言
首页 > 编程语言> > java-执行JAR时,获取ExceptionInInitializerError:未找到version.properties

java-执行JAR时,获取ExceptionInInitializerError:未找到version.properties

作者:互联网

我一直在用Eclipse编写一个可以在IDE中完美运行的小项目.然后,我通过Eclipse构建了一个可运行的.jar文件(该文件应包括jar本身内部的每个依赖库).

我在项目中使用了3个库:

> derby.jar
> qtjambi-4.7.1.jar
> qtjambi-win32-msvc2008-4.7.1.jar

然后,我使用此命令(在Windows中):

java -jar prova.jar

我得到这个:

Connected to database

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
Caused by: java.lang.ExceptionInInitializerError: version.properties not found!
    at com.trolltech.qt.Utilities.<clinit>(Unknown Source)
    at com.trolltech.qt.QtJambi_LibraryInitializer.<clinit>(Unknown Source)
    at com.trolltech.qt.QtJambiObject.<clinit>(Unknown Source)
    at WAAAGH.main(WAAAGH.java:52)
    ... 5 more

如您所见,derby.jar正在按预期方式工作(“已连接到数据库”),但是Qt-Jambi有一个错误,我无法理解.任何想法?

编辑:WAAAGH是包含主要方法的类,第52行包含在:

QApplication.initialize(args);

解决方法:

FWIW,version.properties的位置最近已更改为位于com / trolltech / qt / version.properties软件包的软件包名称空间中.原来的位置是一个糟糕的设计选择,现在已得到纠正.问题是,如果您的类路径中还有另一个JAR,而且它也有一个顶级文件,则ClassLoader有权认为带有该文件的JAR是该程序包的授权,因此不需要在另一个JAR中搜索该文件.包是Java中最小的可部署单元,只有专业的ClassLoader(例如OSGi中使用的那些)具有可解决Java设计这一部分的功能.

通常,您的顶级(应用程序JAR)将在列表中排在第一位,我敢打赌,您有一个或多个文件,例如/log4j.properties /commons-logging.properties等…是因为存在一个或多个文件,然后屏蔽(隐藏)qtjambi-XYZjar中的文件,使其在运行时不可见.这就是为什么当您测试某个方案时该问题可能不存在,而当您尝试另一个方案时(当您以某种方式更改ClassPath时)却出现的原因.

我对http://qt.gitorious.org/qt-jambi/qtjambi-community/commit/f18ce5da3e30b43424bf94e49adf8c4cac0d9862所做的承诺在代码中更好地说明了最近的更改,以使生活更美好.

从来都不应该将QtJambi可再发行的JAR中的version.properties文件复制到类路径的其他部分(例如您所用的顶层项目prova.jar)中,此错误已得到纠正.对于下一个版本.从长远来看,完全消除对文件的需求是我的目标.我的目标是80%地完成该工作,因为在同一类路径中并存多个本机JAR将大大简化部署和入门指南.以及使它们与OSGi和Eclipse完美兼容.

但是还没有发布包含此更改的版本,但是我非常接近(对于Qt 4.7.4,这样做已经30天内了).

开源插件警报:请考虑从http://lists.qt.nokia.com/mailman/listinfo加入http://lists.qt.nokia.com/pipermail/qt-jambi-interest/的邮件列表以获取公告.

标签:eclipse,jar,derby,qt-jambi,java
来源: https://codeday.me/bug/20191207/2087177.html