3

我正在運行一個shell腳本,它調用一個java類來從數據庫獲取一些數據,並用這些數據創建一個excel報告。我得到了線程錯誤異常「主要」 java.lang.NoClassDefFoundError:組織/阿帕奇/ POI/SS時的代碼打在我的Java類下面的線/的usermodel /工作簿:NoClassDefFoundError org/apache/poi/ss/usermodel/Workbook

XSSFWorkbook workbook = new XSSFWorkbook(); 

這是怎麼了我定義類路徑:

CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-2.5.1-final-20040804.jar 
CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-ooxml-3.11.jar 

我驗證了的罐子已經被下載(通過gradle這個),所以想了解我是什麼在這裏失蹤。有人可以幫助我嗎?

堆棧跟蹤:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     at com.test.ExcelReportGenerator.writeExcel(ExcelReportGenerator.java:26) 
     at com.test.ReportRunner.createReport(ReportRunner.java:109) 
     at com.test.ReportRunner.main(ReportRunner.java:93) 
Caused by: java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Workbook 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     ... 15 more 
+0

你爲什麼不使用搖籃建立一個可執行的JAR文件?我不認爲shell腳本需要給你的類路徑 –

回答

2

this Apache POI FAQ entry,混合不同版本之間POI罐子不支持並會在各種各樣的方式,比如你已經找到了一個突破。 不要這樣做!

你需要在同一個版本中使用你的POI罐子。我建議the latest version, available here(目前3.15)

你也許也應該查看components and their dependencies page,以確保你已經得到所有必需的罐子使用Apache POI。那麼,或者使用像Maven或Gradle這樣的依賴管理工具來爲你處理!

+0

使用相同版本的poi工作...非常感謝! – user1318369

0

POI 2.5.1沒有這樣的包(以及因此類)包括(您可以通過拆包jar文件驗證,因爲他們基本上是zip檔案)。請參閱source

將poi依賴項更新爲release 3.這還具有匹配ooxml版本的附加好處。

0

我已經下載了最新的Apache POI二進制文件v3.17 here,它具有創建xlsx文件所需的所有jar文件,並且無需大驚小怪地打開。

所需的罐子顯示在下面的屏幕截圖(參考選定的罐子)FYR。

Main Jars

Supported Jars

Supported Jars