我制作了一个小型应用程序,可以从excel(xls文件)中读取内容并将其内容显示到JTable中。在eclipse中一切正常,但是当我创建jar文件并尝试运行它时,出现以下问题:
java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Row
我发现奇怪的是,问题出在行上,当在行之前调用Workbook和Sheet时,它没有任何麻烦(至少从我的观察中可以看出)。
我已经研究了很多,主要似乎是jar文件不在Class-Path中,但是打开jar和清单文件后,我可以看到所有jar。
Class-Path: poi-ooxml-4.0.1.jar poi-4.0.1.jar commons-codec-1.11.jar commons-collections4-4.2.jar commons-math3-3.6.1.jar commons-compress-1.18.jar curvesapi-1.05.jar poi-ooxml-schemas-4.0.1.jar xmlbeans-3.0.2.jar
这是我的pom.xml文件中的内容:
<build> <plugins> <plugin> <!-- Build an executable JAR --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>./</classpathPrefix> <mainClass>com.clientdb.classes.DynamicRegForm</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>4.0.1</version> </dependency> </dependencies>
我也尝试下载jar文件并将其添加到项目中,而不是将依赖项添加到pom文件中,并且仍然是相同的错误。有任何想法吗?
可能仅在运行jar时才得到此信息, 因为依赖项不可用/未打包在其中 。
尝试生成一个 “ fat jar” (也称为 uber-jar ),它将所有依赖项打包到jar中:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> <configuration> <finalName>YOUR_JAR_FINAL_NAME</finalName> </configuration> </plugin> </plugins> </build>
有关的文档maven-shade-plugin可在此处找到
maven-shade-plugin
更新: 由于您正在使用可运行的jar文件,因此您可以按照与 可执行Jar 相关的文档的本节进行操作 __