Al abrir el archivo .xlsx con Apache POI se obtiene la excepción NoClassDefFoundError InvalidFormatException
Tengo problemas para obtener la importación de todos los archivos .jar necesarios que funcionen correctamente. Mi objetivo final es simplemente leer en una hoja de cálculo de Excel (más específicamente archivos .xlsx) para verificar si la velocidad de Apache POI funcionará para futuras aplicaciones.
Mi pregunta es por qué me están tirando el error ...
java.lang.NoClassDefFoundError: org / apache / poi / openxml4j / exceptions / InvalidFormatException
... cuando puedo ver en la clase InvalidFormatException en / org / apache / poi / openxml4j / exceptions / en el 'archivo poi-ooxml-3.9-20121203.jar'?
No he hecho programación en Java en un tiempo y espero que mi propia cordura haya cometido un error estúpido. Mi código parece estar compilando correctamente pero tengo el mensaje de error anterior cuando intento ejecutar el programa. He investigado un poco mi problema pero no he podido encontrar a alguien en mi situación. Por lo general, simplemente se olvidan / no tienen un archivo .jar requerido. Tal vez estoy en el mismo barco pero espero que puedas decirme.
Voy a dar un desglose de mi lógica. Aquí está el código en TestExcel.java
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
public class TestExcel
{
public static void main(String[] args)
{
InputStream inp;
try
{
inp = new FileInputStream("cost.xlsx");
Workbook wb;
try {
wb = WorkbookFactory.create(inp);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
}
catch (InvalidFormatException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
Aquí está el archivo 'c_test' usado para compilar y ejecutar el código java:
javac -classpath "/home/robsco/Webdev/java/poi/*" TestExcel.java
java TestExcel
Aquí está el listado del directorio del classpath arriba:
robsco@roblaptop:~/Webdev/java/poi$ ls -al
total 26616
drwxrwxr-x 2 robsco robsco 4096 Aug 18 18:13 .
drwxrwxr-x 6 robsco robsco 4096 Aug 18 18:12 ..
-rwxr-xr-- 1 robsco robsco 52915 Sep 18 2009 commons-logging-1.1.jar
-rwxr-xr-- 1 robsco robsco 313898 Apr 5 2009 dom4j-1.6.1.jar
-rwxr-xr-- 1 robsco robsco 121070 Apr 5 2009 junit-3.8.1.jar
-rwxr-xr-- 1 robsco robsco 358180 Apr 5 2009 log4j-1.2.13.jar
-rwxrw-r-- 1 robsco robsco 14841622 Aug 18 13:15 ooxml-schemas-1.1.jar
-rwxr-xr-- 1 robsco robsco 1869113 Nov 26 2012 poi-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 30446 Nov 26 2012 poi-excelant-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 936648 Nov 26 2012 poi-ooxml-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 4802621 Nov 26 2012 poi-ooxml-schemas-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 1226511 Nov 26 2012 poi-scratchpad-3.9-20121203.jar
-rwxr-xr-- 1 robsco robsco 2666695 Apr 5 2009 xmlbeans-2.3.0.jar
y la salida de ejecutar 'c_test':
robsco@roblaptop:~/Webdev/java$ ./c_test
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/openxml4j/exceptions/InvalidFormatException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
at java.lang.Class.getMethod0(Class.java:2764)
at java.lang.Class.getMethod(Class.java:1653)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.openxml4j.exceptions.InvalidFormatException
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:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more
Estoy usando:
SO: Lubuntu 12.10 x86
java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
robsco@roblaptop:~/Webdev/java/poi$ javac -version
javac 1.7.0_25