AWS豆茎+Kotlin+ Spring Boot :主函数()

23c0lvtd  于 2022-11-16  发布在  Kotlin
关注(0)|答案(2)|浏览(96)

我有一个用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-pluginkotlin-maven-plugin
我以前用Java构建了一个类似的应用程序,但没有遇到这个问题。
感谢您的专业知识和时间。
更新:有趣的是,我必须在POM的属性中设置下面一行,以便在开发期间使项目可由IntelliJ执行(我已经忘记了这一点):<start-class>com.prototype.demo.DemoApplication</start-class>
现在我已经删除了它,我得到了一个不同的错误时,运行jar文件。我会花一些时间,看看它是否相关,并相应地更新问题。谢谢!

rdrgkggo

rdrgkggo1#

此问题是由我的POM文件中声明的以下属性引发的:<start-class>com.prototype.demo.DemoApplication</start-class>。一旦我删除了它,并将open关键字添加到Configuration注解类和DemoApplication(包含main的类)中,它终于工作了。

kqlmhetl

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中的主类定义中,我必须设置以下内容:

tasks.getByName<org.springframework.boot.gradle.tasks.bundling.BootJar>("bootJar") {
    mainClass.set("com.company.app.MyApplicationKt")
}

通知:我的应用程序Kt
这是我唯一需要改变的地方来解决这个问题。

相关问题