我已经用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
运行它时,此设置才有效。
答案 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
在正确的位置。其中一件事情可能是不正确的,请解决该问题。
如果无法弄清楚,请在编辑问题时张贴上述命令的输出。