我有一个用Kotlin编写的Sping Boot 应用程序,我已经将其部署到AWS Beanstalk,但它抛出了以下异常:
Exception in thread "main" java.lang.NoSuchMethodException: com.prototype.demo.DemoApplication.main([Ljava.lang.String;)
at java.base/java.lang.Class.getDeclaredMethod(Class.java:2675)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:47)
在本地,当我从IntelliJ运行应用程序时,我没有问题。我的项目中有spring-boot-maven-plugin
和kotlin-maven-plugin
。
我以前用Java构建了一个类似的应用程序,但没有遇到这个问题。
感谢您的专业知识和时间。
更新:有趣的是,我必须在POM的属性中设置下面一行,以便在开发期间使项目可由IntelliJ执行(我已经忘记了这一点):<start-class>com.prototype.demo.DemoApplication</start-class>
现在我已经删除了它,我得到了一个不同的错误时,运行jar文件。我会花一些时间,看看它是否相关,并相应地更新问题。谢谢!
2条答案
按热度按时间rdrgkggo1#
此问题是由我的POM文件中声明的以下属性引发的:
<start-class>com.prototype.demo.DemoApplication</start-class>
。一旦我删除了它,并将open
关键字添加到Configuration
注解类和DemoApplication
(包含main
的类)中,它终于工作了。kqlmhetl2#
build.gradle.kts的解决方案
我在将应用程序部署到ECS时遇到了同样的问题。
重要的事情先做
当你在AWS日志中看到这样的错误时-〉按照问题作者的做法,在本地测试问题。如果应用程序在AWS上失败,很可能在你的本地机器上也会失败。要做到这一点,你在本地构建一个jar,jar文件通常保存在
build/libs/application-x.x.x-SNAPSHOT.jar
中,然后运行java -jar application-x.x.x-SNAPSHOT.jar
现在,您可以修复您的生成任务,并在再次部署之前在本地对其进行测试。
**修复Gradle:**我的主方法是在
MyApplication.kt
文件中定义的,但在gradle中的主类定义中,我必须设置以下内容:通知:我的应用程序Kt
这是我唯一需要改变的地方来解决这个问题。