首页 > 解决方案 > 通过终端(或命令提示符)运行 jar 时的 ClassNotFoundEcception

问题描述

所以我知道有很多像这样的问题,我已经解决了所有问题,但我似乎找不到像我这样的问题。

基本上,我有一个包含很多 Maven 依赖项的 java 项目。当我使用 IntelliJ 运行项目时,该项目编译并运行得很好,但现在我试图通过终端(或命令提示符)运行它。为了做到这一点,我运行了 mvn package,这样我就可以得到一个 jar 文件,当我运行时java -jar server.jar,我得到了经典的 ClassNotFoundEcception 异常。就我而言,它说它是:

Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory

当我通过(暂时)注释掉使用此类的代码部分来抑制它时,我最终会遇到另一个类的相同错误。在这一点上,我知道我需要某种文件夹(如果我错了,请纠正我,但我相信它称为 CLASSPATH),其中包含每个依赖项的 .jar。谁能以清晰的方式向我解释情况以及我应该如何组织每个依赖项的 .jar 文件(如果这甚至是我必须做的来修复我的错误)。

标签: javamavenjardependenciesclassnotfoundexception

解决方案


org.apache.commons.fileupload.FileItemFactory有可能的其他依赖项不在类路径中。Intellij 自动在类路径中包含依赖项,这就是它起作用的原因。

要从包含所有 depedecies 的 CMD 运行程序,请在以下位置定义以下插件pom.xml

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.1.1</version>
    
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
        </configuration>
    
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

并运行:

mvn clean package
java -jar server-jar-with-dependencies.jar

推荐阅读