我正在尝试在 Eclipse中构建一个大型开源项目;它使用 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)
我做了一些研究,似乎这个错误意味着 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 一样简单,但显然不是。那么我该如何解决这个错误呢?