如标题所述,我的 maven 项目将在 IntelliJ 中成功运行,但当我尝试使用 .jar 文件从终端执行此操作时无法运行。
java -jar <jar-name>.jar
抛出的异常是:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at com.scalefocus.java.simeonyachev.Application.<clinit>(Application.java:11)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
我已经看到了一些解决我的问题的方法:
如果它不包含 org.slf4j.slf4j-api.jar 或其实现之一(在我的情况下为 logback-classic.jar),则将依赖项添加到我的类路径中。构建项目后,我可以在 MANIFEST.MF 文件中看到这两个存在于我的类路径中,这应该不是问题。
使用每个命令显式添加依赖项,这对我来说看起来不太好,并且在此之上不起作用:
java -cp <dir>\slf4j-api-1.7.30.jar;<dir>\logback-classic-1.2.3.jar -jar <jar-name>.jar
任何解决问题的想法将不胜感激!
编辑: 原来我的构建插件没有构建一个可执行的jar(里面包含所有需要的依赖项)。这个效果很好:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.10.RELEASE</version>
<configuration>
<fork>true</fork>
<mainClass>com.scalefocus.java.simeonyachev.Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>