java - 通过终端(或命令提示符)运行 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 文件(如果这甚至是我必须做的来修复我的错误)。
解决方案
最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
推荐阅读
- java - 尝试在 appDataFolder 中获取文件列表时出现 GoogleAuthIOException
- python - 在 python 中为 format 提供多个参数的选项
- symfony - 我可以在不从头开始的情况下将现有的 zend 项目迁移到基于 symfony 的项目吗?
- java - Netty 关闭/停止 UDP 服务器
- python - 在哪里部署 Python Flask-SocketIO Webapp
- python - 不打印结果链表 - Python
- go - 如何将 FulfillmentMessages 作为 Dialogflow v2 WebhookResponse 的一部分发送?
- java - 我知道 Unix 和 C++,但不知道 RPM 或 Java,如何让 Java Hello World 运行?
- laravel - 无法使用 with 方法发回数据
- python-3.x - Python Click 库:将默认 optiont() 值设置为环境变量