Java WAR文件:无法找到或加载主类,但它’;在那里
我用Intellij IDEA构建了一个WAR归档工件,其中包含一个用Kotlin编写的Spring Boot MVC应用程序 以下是相关内容:Java WAR文件:无法找到或加载主类,但它’;在那里,java,spring,spring-boot,kotlin,war,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 ... Ap
$ 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: 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
运行时,这种设置才会起作用。jar文件只是一个zip文件,所以请使用zip-l应用程序.WAR
并确保App00HelloMvcKit
类在其中,并且确保MANIFEST.MF
位于正确的位置。其中一个可能是不正确的,所以请修复它
如果您无法理解,请将上述命令的输出发布到问题的编辑中。最有可能的是IntelliJ“Web应用程序:存档”不完全理解Spring引导语义。尝试使用包装战争,如第章中所述:
你是如何发动战争的?您真的需要JSP吗?WAR是通过“Web应用程序:存档”预设创建的Intellij IDEA项目工件。正如我所说,这是一个教学项目,因此JSP。更重要的是,我想知道这里出了什么问题,因为我看不出
ClassNotFoundException
的原因。可能是因为一个普通的java-jar,其清单中提到了主类,不会在org.domain.apps.App00HelloMvcKt.class的WEB-INF/classes文件夹中查找,它必须进行不同的打包。您应该使用spring引导插件来创建war,而不是简单地导出war。虽然使用IntelliJ.jsp,.jsp
文件在404中仍然失败得很惨。但这是另一天的故事。
$ mvn clean package spring-boot:repackage
$ java -jar target/application.war