我正在使用Install4j 5.1.11为我的应用程序创建Windows安装程序。我需要用它嵌入JRE版本1.7.0_72。 Install4j JRE下载列表中没有此特定版本的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。对于其中一个Web应用程序(称为Fieldbook),而Tomcat正在加载上下文,我收到如下错误:
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
不同,后者通常是{{1}}的一部分?
答案 0 :(得分:1)
Install4j 5.x版本在创建JRE包时应用Pack 200压缩。此压缩选项不可配置。压缩最终会修改JRE包的内容,这会破坏已签名和摘要标记的jar文件,例如jce.jar
,这是JRE lib的一部分。
解决方法是使用Install4j v6.x创建JRE捆绑包,并取消选中新的“Pack Jar files”选项,以禁用压缩。然后可以在Install4j 5.x项目中使用这些软件包(将它们放在Install4j安装的 jres 文件夹下)以嵌入媒体文件。