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

mar*_*yli 2 java eclipse excel apache-poi

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

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

Jay*_*667 5

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

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

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

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

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

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

TBH Apache POI 是不应该如何编写软件的“好”示例。它非常臃肿且占用大量内存,并且具有非常有趣/奇怪的行为。所以我为更新的 .xls 文件格式编写了自己的库,它的速度快了 100 倍,更小,更可靠。并且在字符串缓存和单元格格式操作优化方面做得更好。所以要好 1000000 倍 :-P

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