首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NoClassDefFoundError,但是代码可以工作,类也存在。

NoClassDefFoundError,但是代码可以工作,类也存在。
EN

Stack Overflow用户
提问于 2022-06-28 09:01:21
回答 1查看 191关注 0票数 0

我有一个Maven项目,我使用Aspose单元来操作xlsx文件。Aspose是通过POM配置的。

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
[...]
    <repositories>
        <repository>
            <id>AsposeJavaAPI</id>
            <name>Aspose Java API</name>
            <url>https://repository.aspose.com/repo/</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-cells</artifactId>
            <version>22.6</version>
        </dependency>
    </dependencies>

现在,当我将项目作为Java应用程序进行测试时,没有错误。代码成功运行,但是当我执行生成的JAR时,我得到了以下结果:

代码语言:javascript
运行
复制
descrizione sconto
descrizione
codice sconto
Exception in thread "main" java.lang.NoClassDefFoundError: com/aspose/cells/SaveOptions
        at src.main.java.MainClass.main(MainClass.java:44)
Caused by: java.lang.ClassNotFoundException: com.aspose.cells.SaveOptions
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        ... 1 more

前三行是项目的控制台输出,也会创建输出文件,但是会出现错误。

我使用的是IntelliJ IDEA,Java版本: JDK17.0.2,Maven版本: Maven 3.8.1

EN

回答 1

Stack Overflow用户

发布于 2022-06-28 16:06:32

我通过更改pom.xml中的构建来解决这个问题。

代码语言:javascript
运行
复制
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>eu.tvrsier.MainClass</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>jar-with-dependencies</descriptorRefs>
                <appendAssemblyId>false</appendAssemblyId>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.8</version>
            <executions>
                <execution>
                    <!-- Default configuration for running with: mvn clean javafx:run -->
                    <id>default-cli</id>
                    <configuration>
                        <mainClass>eu.tvrsier.MainClass</mainClass>
                        <launcher>app</launcher>
                        <jlinkZipName>app</jlinkZipName>
                        <jlinkImageName>app</jlinkImageName>
                        <noManPages>true</noManPages>
                        <stripDebug>true</stripDebug>
                        <noHeaderFiles>true</noHeaderFiles>
                    </configuration>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>

在这些更改之前,我创建了一个包,所以我在工件ID中使用了maven-plugin而不是maven-程序集插件,并且我还添加了执行块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72783584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档