使用Jbuilder引用外部jar包制作的jar文件,运行时的问题

23 篇文章 0 订阅

我做了一个项目,从外部应用了不少jar包,用Jbuilder 2006运行时正常,但是制作为jar文件以后,运行java -jar xxx.jar命令时候会报如下错误:

Exception in thread "main" java.lang.SecurityException: no manifiest section for
 signature file entry com/sun/java/help/impl/TagProperties.class
        at sun.security.util.SignatureFileVerifier.verifySection(SignatureFileVe
rifier.java:377)
        at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVeri
fier.java:231)
        at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier
.java:176)
        at java.util.jar.JarVerifier.processEntry(JarVerifier.java:234)
        at java.util.jar.JarVerifier.update(JarVerifier.java:188)
        at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
        at java.util.jar.JarFile.getInputStream(JarFile.java:386)
        at sun.misc.JarIndex.getJarIndex(JarIndex.java:99)
        at sun.misc.URLClassPath$JarLoader$1.run(URLClassPath.java:606)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.misc.URLClassPath$JarLoader.ensureOpen(URLClassPath.java:597)
        at sun.misc.URLClassPath$JarLoader.<init>(URLClassPath.java:581)
        at sun.misc.URLClassPath$3.run(URLClassPath.java:331)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.misc.URLClassPath.getLoader(URLClassPath.java:320)
        at sun.misc.URLClassPath.getLoader(URLClassPath.java:297)
        at sun.misc.URLClassPath.getResource(URLClassPath.java:167)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:192)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

后来上网搜索,发现很多使用Jbuilder从外部引用jar包在制作jar文件时候都有这个问题。大概的原因应该是外部jar包有签名,制作成新的jar文件以后没法通过验证,这似乎是Jbuilder的问题(不确定)。

网上有一些解决办法,比如把要导入的jar包放进JBuilder的jdk库,然后让JBuilder重新扫描一次,不过这个方法我没有成功,估计是MAINFEST.MF文件里面的路径问题吧,总是提示找不到import的东西,我尝试过几次没有解决。

另一个方法是在JBuilder制作jar文件的设置时不选择生成MAINFEST文件,这个方法我也没成功。

最后拼死一搏了,前面不是MAINFEST.MF文件路径不对吗,那我仍然从外部导入jar包,仍然生成MAINFEST文件。生成好以后用WINRAR打开,发现META-INF里面有很多文件文件夹,我也不知道是做啥用的,干脆除了MAINFEST.MF其他文件文件夹都删除。删除完毕以后执行java -jar xxx.jar命令,居然成功了。估计删除的那几个文件可能就是验证用的,但是JBuilder生成的时候不完整,所以验证了,但不成功。现在不用验证了,而且jar包都变成了.class文件和我写的程序在同一级,所以MAINFEST.MF文件不用修改路径也可以直接找到了

 网上似乎不仅仅是Jbuilder2006有这个问题,从9开始往后我见到有不少人都提出这样的问题了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值