WAR 文件:无法找到或加载主类,但它在那里

CBl*_*lew 3 java spring war kotlin spring-boot

我使用 Intellij IDEA 构建了一个 WAR 存档工件,其中包含一个用 Kotlin 编写的 Spring Boot MVC 应用程序。

以下是相关内容:

$ jar tvf application.war
...
1649 [timestamp] WEB-INF/classes/org/domain/apps/App00HelloMvcKt.class
2087 [timestamp] WEB-INF/classes/org/domain/apps/App00HelloMvc.class
...
Run Code Online (Sandbox Code Playgroud)

App00HelloMvcKt包含fun main(...),并且App00HelloMvc是 Spring Boot 应用程序类。

MANIFEST.MF包含Main-Class条目:

Main-Class: org.domain.apps.App00HelloMvcKt
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,出现了一个问题:

$ java -jar application.war
Error: Could not find or load main class org.domain.apps.App00HelloMvcKt
Caused by: java.lang.ClassNotFoundException: org.domain.apps.App00HelloMvcKt
Run Code Online (Sandbox Code Playgroud)

据我了解,有了这个目录结构,不需要额外的摸索类路径。那为什么不能运行呢?


附加信息:这是一个教学项目。我正在尝试.jsp从带有嵌入式 Tomcat 的 Spring Boot MVC 应用程序提供页面。根据互联网,此设置仅在您将应用程序打包到 WAR 并使用java -jar.

Kar*_*cki 6

很可能 IntelliJ“Web 应用程序:存档”不完全理解 Spring Boot 语义。尝试使用Maven Spring Boot Plugin打包 WAR ,如章节68.2 Packaging Executable Jar and War Files 中所述

$ mvn clean package spring-boot:repackage
$ java -jar target/application.war
Run Code Online (Sandbox Code Playgroud)