Maven:无法找到或加载主类

问题描述 投票:0回答:1

我制作了第一个 Spring 应用程序,现在我需要将其打包到 jar 文件中进行部署。在

pom.xml
内部,我指定了
maven-jar-plugin
以便自动为我的 jar 创建清单文件,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>bg.sofia.uni.fmi.melodify.MelodifyApplication</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

然后我使用 Intellij Maven 视图中的打包按钮对其进行打包,它成功生成了一个 jar 文件。当我使用

java -jar <path/to/jar/file.jar>
运行 jar 文件时,出现以下错误:

Error: Could not find or load main class bg.sofia.uni.fmi.melodify.MelodifyApplication
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/CommandLineRunner

我的

MelodifyApplication
课程看起来像这样:

@SpringBootApplication
public class MelodifyApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(MelodifyApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Application started ...");
    }
}

我尝试编写自己的 Manifest.mf 文件并自己创建 jar,如下所示:

jar cfm Melodify.jar Manifest.mf -C Melodify/src/main/java/ .

但我遇到了同样的错误。我做错了什么?

java spring maven intellij-idea deployment
1个回答
0
投票

一种解决方案是遵循 Spring Initializr 的模式:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.1</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

可选: 定义

spring-boot-starter-parent
让您的生活更轻松 - 它为您处理依赖关系管理。背景:请参阅此问题

最后,使用 Spring Boot Maven Plugin 代替 Maven Jar Plugin

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

通过此设置,发出:

mvn package

...应该为您的 Spring 应用程序构建一个合适的 uber-jar

java -jar target/spring-sandbox-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.1)

2024-01-10T09:52:00.671+01:00  INFO 98109 --- [           main] c.g.t.s.SpringSandboxApplication         : Starting SpringSandboxApplication using Java 17.0.3 with PID 98109 (/Users/tamas/git/spring-sandbox/target/spring-sandbox-0.0.1-SNAPSHOT.jar started by tamas in /Users/tamas/git/spring-sandbox)
...
© www.soinside.com 2019 - 2024. All rights reserved.