可执行 JAR 执行不同于 eclipse 执行

Executable JAR execution different from eclipse execution

我使用 Java 创建了一个应用程序,它使用 Apache POI 处理 excel 文件。问题是,当我 运行 来自 eclipse 的代码时,它工作正常,但是当我为应用程序制作可执行 jar 时(使用 eclipse 导出可执行 jar 选项),jar 工作正常但结果不同,甚至生成的 excel 文件的大小也不同。

我研究了很多,但没有找到方便的解决方案。

啊是的。我几年前也有过同样的经历。

在 Eclipse 中创建可运行的 .jar 时,您可以选择如何处理来自库(例如本例中的 Apache POI)的 .class 文件:

  1. 需要将classes(.class个文件)打包成jar文件
  2. 将需要的库(.jar文件)打包成jar文件
  3. 将库复制到子文件夹中

有趣的是,对于 Apache POI,三种不同的打包方式产生了巨大的差异:

  1. 在启动速度
  2. 执行速度
  3. 内存要求 (RAM)
  4. 在生成的输出文件中

我不记得哪个给了我预期的结果。 所以你必须自己尝试一下。 (从 Eclipse 启动 Java 项目的方式来看,它应该是 #3,子文件夹中的库,这会得到相同的结果)。但是:无论如何都要试试其他的;正如我所说,未来的巨大差异。

TBH Apache POI 是一个 'good' 不应编写软件的示例。 它非常臃肿,需要大量 RAM,并且具有相当 interesting/odd 的行为。 所以我为更新的 .xls 文件格式编写了我自己的库,它只是快了 100 倍,更小且更可靠。并且字符串缓存和单元格格式操作优化更好。所以好 1000000 倍 :-P

好处是 POI 开发团队知道他们项目的局限性和缺点,并提供多种处理文件的模式,以克服这些缺点。所以,毕竟,向他们致敬!