ClassNotFoundEcception when 运行 jar 通过终端(或命令提示符)

ClassNotFoundEcception when running jar through Terminal (or command prompt)

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

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

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

当我通过(暂时)注释掉使用此 class 的代码部分来抑制它时,我最终对另一个 class 遇到了同样的错误。此时,我知道我需要某种包含每个依赖项的 .jar 的文件夹(如果我错了请纠正我,但我相信它称为 CLASSPATH)。任何人都可以清楚地向我解释这种情况以及我应该如何组织每个依赖项的 .jar 文件(如果这是我必须做的来修复我的错误)。

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

要 运行 来自 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