2013-09-25 39 views
2

我检查了其他线程,但他们的情况和解决方案不适用于我的情况。java.lang.SecurityException:Manifest主要属性的签名文件摘要无效

该程序应该创建一个蓝牙设备和计算机之间的连接,并应该从该设备接收数据。 因此,我正在使用本身包含清单文件的蓝牙连接所需的库。我猜测,这是问题发生的地方。

我已经尝试过使用不同的JDK,但没有成功。

下面是完整的错误消息:

Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes 
at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:240) 
at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:193) 
at java.util.jar.JarVerifier.processEntry(JarVerifier.java:262) 
at java.util.jar.JarVerifier.update(JarVerifier.java:216) 
at java.util.jar.JarFile.initializeVerifier(JarFile.java:345) 
at java.util.jar.JarFile.getInputStream(JarFile.java:412) 
at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:775) 
at sun.misc.Resource.cachedInputStream(Resource.java:77) 
at sun.misc.Resource.getByteBuffer(Resource.java:160) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:436) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:190) 
at com.intel.bluetooth.BlueCoveImpl.loadStackClass(BlueCoveImpl.java:358) 
at com.intel.bluetooth.BlueCoveImpl.detectStack(BlueCoveImpl.java:454) 
at com.intel.bluetooth.BlueCoveImpl.access$500(BlueCoveImpl.java:70) 
at com.intel.bluetooth.BlueCoveImpl$1.run(BlueCoveImpl.java:1085) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.intel.bluetooth.BlueCoveImpl.detectStackPrivileged(BlueCoveImpl.java:1083) 
at com.intel.bluetooth.BlueCoveImpl.getBluetoothStack(BlueCoveImpl.java:1076) 
at javax.bluetooth.LocalDevice.getLocalDeviceInstance(LocalDevice.java:75) 
at javax.bluetooth.LocalDevice.getLocalDevice(LocalDevice.java:95) 
at de.offis.medical.sensor.discovery.linux.bluetooth.DiscoveryBT.<init>(DiscoveryBT.java:50) 
at Helper.getDiscoveries(Helper.java:27) 
at Main.startSensorDemo(Main.java:31) 
at Main.main(Main.java:46) 
+0

您的项目可能没有'manifest' ,但是你在你的类路径中添加的'jars'是你的项目需要的'manifest',并且问题可能出现在依赖的'jars'中。 –

+0

如何描述你试图实现什么以及你的场景是怎样的?只是使用谷歌搜索例外,并指出结果不符合您的问题,并不能帮助我们提供有意义的答案。但即使是堆栈跟踪也表明您正在使用包含Manifest的jar文件。 – Matthias

+0

你是对的Mathias,我编辑了我的帖子。所以我使用两个蓝牙库,每个包含清单文件。但我不确定要寻找什么。 – JustusVL

回答

3

尝试从罐中取出META-INF文件夹,添加清单,并再次登录JAR,它帮助我:http://jehy.ru/articles/2013/12/13/invalid-signature-file-digest-for-manifest-main-attributes/

+0

感冒你请提一下你如何签署一个罐子? – Bionix1441

+0

我使用oracle标志工具手动签署了jar文件 - https://docs.oracle.com/javase/tutorial/deployment/jar/signing.html。你也可以用一些IDE的集成工具来做到这一点。 – Jehy

+0

我可以签署一个与另一个现有jarfile相同的jar文件吗? – Bionix1441