【发布时间】:2013-04-16 12:44:40
【问题描述】:
我正在尝试在 Eclipse 中构建large Open Source project;它使用 Maven,所以我安装了各种插件(m2eclipse 等),但我对这个设置有点不熟悉。
我可以毫无问题地构建和运行我感兴趣的特定 JAR。但是,当新建的 JAR 尝试打开一个大的 ZIP 文件时,我得到了这个:
Exception in thread "main" java.lang.RuntimeException: java.util.zip.ZipException: invalid CEN header (bad sig
nature)
at org.opentripplanner.graph_builder.impl.GtfsGraphBuilderImpl.buildGraph(GtfsGraphBuilderImpl.java:17
9)
at org.opentripplanner.graph_builder.GraphBuilderTask.run(GraphBuilderTask.java:127)
at org.opentripplanner.graph_builder.GraphBuilderMain.main(GraphBuilderMain.java:51)
Caused by: java.util.zip.ZipException: invalid CEN header (bad signature)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(Unknown Source)
我did some research 似乎这个错误意味着 java.util.ZipFile 无法读取该文件,因为它是 ZIP64 格式。显然这是在 Java 1.7 中修复的,所以我尽职尽责地更新了 OS X 上的 JDK,并尝试通过在 Eclipse 中右键单击它来更改 Maven 项目,然后更改 Project Facet,这反过来似乎已经更新了该项目中的 JRE 库到 1.7:
但是,这不起作用 - 即使重新构建了整个项目,我仍然会收到错误消息。
旧的 java.util.zip 是否有可能仍然从某个地方被拉入?我不太熟悉 Java 中的链接是如何工作的,旧的 JDK 可以像这样“嵌入”在依赖项中吗?还是 java.util.zip 只是在目标机器上使用? (这绝对是 JRE 1.7)我知道抛出异常的代码实际上包含在一个单独的 JAR 中,该 JAR 作为 Maven 依赖项引入:
我是否需要针对 Java 1.7 跟踪并重新构建这个外部 JAR,这是这里的问题吗?或者是否有一个 Maven“父项目”的概念将我的新 JRE 1.7 退回到 1.6?抱歉,如果这些问题很幼稚。
我原本以为只要在运行时机器上更新 JRE 就这么简单,但显然不是。那么我该如何解决这个错误呢?
【问题讨论】:
-
使用 Eclipse 时,您必须明确告诉它使用另一个 JRE,而不是它自己使用的 JRE。这是使用 Apple Java 6 运行的。较新的 Eclipse 需要 Oracle Java,它会自动修复该问题。