Apache POI在Eclipse中导出带有Package选项的Runnable Jar时非常慢



当我从eclipse中使用Package选项导出可运行的jar时,Apache POI在读取excel文件时出现性能问题,而不是使用Extract所需的库到生成的jar选项。

为了向您展示这个问题,我创建了一个最小程序。构建。Gradle文件是:

plugins {
id 'java'
}
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.2'
}

和App.java文件:

import java.io.File;
import java.io.FileInputStream;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class App {
public static void main(final String[] args) {
final String excelPath = System.getProperty("user.dir") + "/libro.xlsx"  ;
try {
final FileInputStream fis = new FileInputStream(new File(excelPath));


final long TIMER = System.currentTimeMillis();
System.out.println(  "start") ;
XSSFWorkbook wb = new XSSFWorkbook( fis );
wb.close();
System.out.println( "end : " + ( System.currentTimeMillis() - TIMER) + " msec" ) ;


} catch (final Exception e) {
System.out.println("error " + e.getMessage()) ; 
}
}
}

当我用空的excel文件运行程序时,我在同一台机器上使用相同的文件得到以下结果:

  • 使用Extract选项生成:

    C:temp>java -jar prueba.jar
    start
    end : 603 msec
    
  • 使用Package选项生成:

    C:temp>java -jar prueba.jar
    start
    end : 6015 msec
    

约10倍。

可能是什么问题,我如何修复它,使执行时间相似?

谁能帮我找到这个问题并解决它?提前谢谢你。

您可以使用jar tf和归档文件查看两个文件之间的差异。可能是其中一个存档包含签名的内容,这意味着在加载时,JVM将验证内容是否相同。在使用-Xverify:none运行时,您可能会看到是否有类似的执行时间,尽管我不建议在生产系统中这样做。

最新更新