【发布时间】:2015-03-05 23:32:49
【问题描述】:
我正在使用 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 哈希值与 jce.jar 的 META-INF/MANIFEST.MF 中的哈希值不同,而 jce.jar 通常是 jre/libs 的一部分?
【问题讨论】:
-
这可能与pack200有关。在 JRE 包向导中,请取消选中“选择 JRE”步骤中的“打包 JAR 文件”复选框并创建一个新包。那么问题会消失吗?
-
对不起,该功能仅在 6.0 之后才存在。您可以使用 6.0 创建一个同样适用于 5.1.15 的包
-
感谢英戈凯格尔。在我使用的 Install4j 5.1.11 版本中,向导的“选择 JRE”步骤上没有“打包 Jar 文件”复选框。但是,我在常规设置 -> 媒体文件选项 -> 压缩部分下确实有“使用 Pack200 Jar 压缩(仅适用于 Java >=1.5)”选项,并且没有勾选。我确实在相同的设置下勾选了“使用 LZMA 压缩”选项,这也是原因吗?
-
不,只有 pack200 可能会导致这样的问题。无论媒体文件部分中的设置如何,都会打包 JRE 包。在 6.0 版中,JRE 包创建向导有一个禁用 pack200 的选项。
-
@IngoKegel 我下载了 Install4j 6.0.1(适用于 Windows 64 位)并使用 90 天评估许可证进行安装。不幸的是,自定义 JRE 包创建向导屏幕(由“我找不到合适的 JRE 包”链接加载的屏幕)根本没有加载!也没有消息。单击此链接没有任何反应。另一个错误?
标签: install4j