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

Java 执行JAR时,获取ExceptionInInitializerError:version.properties未找到,java,eclipse,jar,derby,qt-jambi,Java,Eclipse,Jar,Derby,Qt Jambi,我一直在用Eclipse编写一个小项目,它可以在IDE中完美地运行。然后,我通过Eclipse构建了一个runnable.jar文件(它应该包括jar本身中的每个依赖项库) 我在项目中使用了3个库: derby.jar qtjambi-4.7.1.jar qtjambi-win32-msvc2008-4.7.1.jar 然后我使用此命令(在windows中): 我明白了: Connected to database Exception in thread "main" java.lang.

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

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

  • derby.jar
  • qtjambi-4.7.1.jar
  • qtjambi-win32-msvc2008-4.7.1.jar
然后我使用此命令(在windows中):

我明白了:

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

QtJambiObject
如何加载?您是否已将其打包在
prova.jar
中?缺少的文件
version.properties
应该是顶层(而不是任何子目录)的同一个jar的一部分。似乎您还没有将其打包到顶层的
prova.jar
中。有关如何加载的说明,请参见

最好在命令行中指定所有JAR和主类:

java -classpath prova.jar;derby.jar;qtjambi-4.7.1.jar;qtjambi-win32-msvc2008-4.7.1.jar <your main class>
java-classpath prova.jar;derby.jar;qtjambi-4.7.1.jar;qtjambi-win32-msvc2008-4.7.1.jar

替换;使用:如果您在*nix

FWIW上运行,则version.properties的位置最近已更改为位于bundles com/trolletech/qt/version.properties的包命名空间内。旧的位置是一个糟糕的设计选择,现在已经得到纠正。问题是,如果在类路径中有另一个JAR,它也有一个顶级文件,那么类加载器有权认为包含该文件的JAR是包的授权文件,而不需要在另一个JAR中搜索该文件。在Java中,包是一个最小的可部署单元,只有专业类装入器(如OSGi中使用的类装入器)才具有处理Java设计这一部分的功能

通常,您的顶级(应用程序JAR)将位于列表的第一位,我打赌在该JAR中您有一个或多个文件,如/log4j.properties/commons-logging.properties等。。。这是因为存在一个或多个文件,所以它会在运行时屏蔽(隐藏)qtjambi-X.Y.Z.jar中的文件。这就是为什么当您测试某个场景时,问题可能不存在,但当您尝试另一个场景时(当您以某种方式更改类路径时),问题就会出现的原因

我对better项目的承诺在代码中解释了最近为改善生活所做的更改

您不应该将version.properties文件从QtJambi可再发行jar复制到类路径的其他部分(如您案例中的顶级项目prova.jar),这是一个已在下一版本中更正的错误。从长远来看,我的目标是完全消除对该文件的需求,我有80%的目标是实现这一目标,作为使多个本机JAR在同一类路径中共存的工作的一部分,这将大大简化部署和入门指南;以及让他们很好地使用OSGi和Eclipse

不过,尚未发布包含此更改的版本,但我非常接近(在Qt4.7.4发布后的30天内)


开源插件告警:请考虑加入邮件列表进行公告。

是WAAAH你的一个类吗?是的,它是包含主方法的类。在第52行,我尝试启动qt-jambi。您是否检查了这些qt-jambi jar中的文件
version.properties
?在version.properties文件中的什么位置?它是打包在罐子里的吗?这可能是我今天经历的并在这里被问到的根本原因吗:
QApplication.initialize(args);
java -classpath prova.jar;derby.jar;qtjambi-4.7.1.jar;qtjambi-win32-msvc2008-4.7.1.jar <your main class>