我正在使用Install4j 5.1.11为我的应用程序创建Windows安装程序。我需要在其中嵌入JRE版本1.7.0_72。JRE的此特定版本在Install4j JRE下载列表中不可用。因此,我将Install4j指向手动创建了一个包C\Program Files\Java\jdk_1.7.0_72\jre
。Install4j创建一个包C:\Program Files (x86)\install4j5\jres\windows-amd64-1.7.0_72.tar.gz
。凉爽的。现在,在媒体文件向导中,我选择此JRE捆绑包来嵌入并构建我的安装程序。
然后,我运行内置的安装程序并安装我的应用程序。我可以看到该文件jre
夹在安装主目录下已解压缩,并且具有相同的版本1.7.0_72
。凉爽的。因此,现在我使用exe启动器启动应用程序,该启动器将启动Tomcat并加载应用程序等,并使用嵌入式jre进行启动。对于Tomcat加载上下文时的其中一个Web应用程序(称为Fieldbook),出现以下错误:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Fieldbook]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1120)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1678)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.SecurityException: SHA1 digest error for javax/crypto/CipherSpi.class
at sun.security.util.ManifestEntryVerifier.verify(ManifestEntryVerifier.java:220)
at java.util.jar.JarVerifier.processEntry(JarVerifier.java:241)
at java.util.jar.JarVerifier.update(JarVerifier.java:228)
at java.util.jar.JarVerifier$VerifierStream.read(JarVerifier.java:483)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
at java.io.DataInputStream.readInt(DataInputStream.java:387)
at org.apache.tomcat.util.bcel.classfile.ClassParser.readID(ClassParser.java:237)
at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:114)
at org.apache.catalina.startup.ContextConfig.populateJavaClassCache(ContextConfig.java:2293)
到底是怎么回事?为什么,又是如何在CipherSpi.class的SHA哈希成为从什么是在不同META-INF/MANIFEST.MF
的jce.jar
是通常的部分jre/lib
S'
创建JRE捆绑包时,Install4j 5.x版本适用Pack 200压缩。此压缩选项不可配置。压缩最终会修改JRE软件包的内容,从而破坏签名和摘要标记的jar文件(例如jce.jar
JRE lib的一部分)。
解决方法是使用Install4j v6.x来创建JRE软件包,并取消选中新的“ Pack Jar文件”选项,从而可以禁用压缩。然后,可以在Install4j 5.x项目中使用这些捆绑软件(通过将它们放在Install4j安装的jres文件夹下)以嵌入媒体文件中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句