我正在运行 AlmaLinux Linux 8.10 (Cerulean Leopard)
运行命令
java -version
给出:
openjdk version "1.8.0_432"
OpenJDK Runtime Environment (build 1.8.0_432-b06)
OpenJDK 64-Bit Server VM (build 25.432-b06, mixed mode)
我已经下载了 Apache POI .jar 文件(从 https://archive.apache.org/dist/poi/release/bin/ 中的 poi-bin-5.2.3-20220909.zip 中提取)。
然后我采用了
https://www.tutorialspoint.com/apache_poi/apache_poi_workbooks.htm中的示例
Create Blank Workbook
创建了一个空白 Excel 文件:
import java.io.*;
import org.apache.poi.xssf.usermodel.*;
public class CreateWorkBook {
public static void main(String[] args)throws Exception {
//Create Blank workbook
XSSFWorkbook workbook = new XSSFWorkbook();
//Create file system using specific name
FileOutputStream out = new FileOutputStream(new File("createworkbook.xlsx"));
//write operation workbook using file out object
workbook.write(out);
out.close();
System.out.println("createworkbook.xlsx written successfully");
}
}
接下来我使用命令“编译”了程序
> javac -classpath /home/public/INFO/java_scripts/userlib/poi-5.2.3.jar:/home/public/INFO/java_scripts/userlib/poi-ooxml-5.2.3.jar CreateWorkBook.java
此步骤不会产生任何错误。接下来我就跑
> java CreateWorkBook
这会产生错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook
at CreateWorkBook.main(CreateWorkBook.java:7)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.xssf.usermodel.XSSFWorkbook
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 1 more
从错误消息来看,失败的行是
XSSFWorkbook workbook = new XSSFWorkbook();
那么问题来了,为什么?
文件
poi-bin-5.2.3-20220909.zip
包含 Apache Poi 使用的所有库和传递依赖项。所有这些库都需要在运行时包含在类路径中。
TutorialsPoint 网站在此页面(第 3 步)列出了类路径中所需的所有库。但是,如果使用
*
语法来包含指定目录中的所有 .jar
文件会更容易,因此要运行 Java 程序,您只需使用以下命令行:
java -cp 'poi-bin-5.2.3/*:poi-bin-5.2.3/lib/*:poi-bin-5.2.3/ooxml-lib/*:.' CreateWorkBook
注意
-cp
选项值用单引号引起来,因为我们不希望 shell 进行任何全局扩展。