Gradle projet,在heroku上部署期间出现错误NoSuchMethodException

Posted

技术标签:

【中文标题】Gradle projet,在heroku上部署期间出现错误NoSuchMethodException【英文标题】:Gradle projet, error NoSuchMethodException during deployment on heroku 【发布时间】:2021-10-21 20:27:11 【问题描述】:

我正在尝试在 heroku 上部署一个带有 gradle 的 Spring Boot 项目。

但是在 Herku 上部署期间,当应用程序尝试启动时,我收到以下错误:

2021-08-20T07:22:42.904392+00:00 heroku[web.1]: Starting process with command `java -Dserver.port=42904 $JAVA_OPTS -jar build/libs/api-gateway-0.0.1-SNAPSHOT.jar`
2021-08-20T07:22:44.675657+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them.
2021-08-20T07:22:44.679643+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -XX:+UseContainerSupport -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8
2021-08-20T07:22:44.990415+00:00 app[web.1]: Exception in thread "main" java.lang.NoSuchMethodException: com.abade.apigateway.ApiApplication.main([Ljava.lang.String;)
2021-08-20T07:22:44.990713+00:00 app[web.1]: at java.base/java.lang.Class.getDeclaredMethod(Class.java:2475)
2021-08-20T07:22:44.990742+00:00 app[web.1]: at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:47)
2021-08-20T07:22:44.990803+00:00 app[web.1]: at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
2021-08-20T07:22:44.990841+00:00 app[web.1]: at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
2021-08-20T07:22:44.990880+00:00 app[web.1]: at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
2021-08-20T07:22:45.062399+00:00 heroku[web.1]: Process exited with status 1

当我没有指定 gradle 中的主类和 Procfile 中的 jar 时,我得到一个错误:没有主清单属性。

这是我的 Procfile :

web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/api-gateway-0.0.1-SNAPSHOT.jar

还有我的 build.gradle:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins 
    id("org.springframework.boot") version "2.5.3"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    kotlin("jvm") version "1.4.32"
    kotlin("plugin.spring") version "1.4.32"


group = "com.abade"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11

repositories 
    mavenCentral()


dependencies 
    implementation("org.springframework.boot:spring-boot-starter-data-mongodb")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("com.google.firebase:firebase-admin:8.0.0")
    implementation("junit:junit:4.13.1")
    implementation("org.modelmapper:modelmapper:2.3.3")
    implementation ("io.springfox:springfox-boot-starter:3.0.0")
    runtimeOnly("com.h2database:h2")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.mockito:mockito-core:3.+")


tasks.withType<KotlinCompile> 
    kotlinOptions 
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "11"
    


tasks.withType<Test> 
    useJUnitPlatform()


springBoot 
    mainClass.set("com.abade.apigateway.ApiApplication")

您有什么建议吗?

【问题讨论】:

【参考方案1】:

它试图告诉你,com.abade.apigateway.ApiApplication 缺少方法 main([Ljava.lang.String;) ...因此主要入口点是未知的。

【讨论】:

当然可以,但是解决这个问题的解决方案是什么?该应用程序在本地运行良好 @PierrickCompois 你如何在本地运行它? gradle bootRun? @jannis 我正在使用 IntelliJ 启动,但您解决了我的问题,gradle bootRun 无法正常工作,所以我修复了它!非常感谢

以上是关于Gradle projet,在heroku上部署期间出现错误NoSuchMethodException的主要内容,如果未能解决你的问题,请参考以下文章

Heroku Spring Boot Gradle App 已部署但 App 崩溃

在 Heroku 中部署我的 Gradle (Spring Boot) 应用程序

CircleCI + Gradle + Heroku部署

在 Heroku 成功的机器人上部署不起作用 - JDA

使用 bitbucket 管道部署到 heroku 的 Spring Boot gradle 项目在 build/libs/app-SNAPSHOT-plain.jar 中给出错误 no main m

Gradle 应用程序无法启动