0

如标题所述,我的 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>
4

0 回答 0