WAR文件:找不到或加载主类,但是在那里

时间:2018-08-14 12:19:11

标签: java spring spring-boot kotlin war

我已经用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
...

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

MANIFEST.MF包含Main-Class项:

Main-Class: org.domain.apps.App00HelloMvcKt

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

$ 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

据我了解,使用此目录结构,不需要进行其他任何有关类路径的摸索。那为什么它无法运行?


其他信息:这是一个教学项目。我正在尝试使用嵌入式Tomcat从Spring Boot MVC应用程序提供.jsp页。根据互联网,仅当您将该应用程序打包到WAR中并使用java -jar运行它时,此设置才有效。

2 个答案:

答案 0 :(得分:3)

最有可能的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

答案 1 :(得分:0)

一个jar文件只是一个zip文件,因此zip -l application.war还要确保您的App00HelloMvcKit类在其中,并且您的MANIFEST.MF在正确的位置。其中一件事情可能是不正确的,请解决该问题。

如果无法弄清楚,请在编辑问题时张贴上述命令的输出。