我正在使用Kotlin学习Spring Boot (因为我来自Android,使用Kotlin)。我和格拉多约好的。在我的本地机器上,一切都很好。但我在把它部署到Heroku时遇到了一些问题。
这就是我得到的错误:
Error: Main method not found in class com.markoid.packit.PackitApplication, please define the main method as:
2021-07-01T20:58:51.075484+00:00 app[web.1]: public static void main(String[] args)
2021-07-01T20:58:51.075581+00:00 app[web.1]: or a JavaFX application class must extend javafx.application.Application
我在其他帖子上读到,我需要在根目录中添加system.properties文件,所以我这样做了,但没有任何变化。
- 系统.属性 *
java.runtime.version=11
这是我的 build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "2.5.1"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
kotlin("jvm") version "1.5.10"
kotlin("plugin.spring") version "1.5.10"
}
group = "com.markoid"
version = "1.0.0-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11
repositories {
mavenCentral()
}
dependencies {
// Spring Boot Core
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-mail")
implementation("org.springframework.boot:spring-boot-starter-data-mongodb")
// Joda Time library
implementation("joda-time:joda-time:2.10")
// Json Web Token
implementation("io.jsonwebtoken:jjwt-impl:0.11.1")
implementation("io.jsonwebtoken:jjwt-api:0.11.1")
implementation("io.jsonwebtoken:jjwt-jackson:0.11.1")
// Serializers
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
// Documentation
implementation("io.springfox:springfox-swagger2:2.6.1")
// Kotlin related
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
// Testing Frameworks
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "11"
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
tasks.withType<Jar> {
manifest {
attributes["Main-Class"] = "com.markoid.packit.PackitApplication"
}
}
我的应用程序文件就像这样简单:
@SpringBootApplication
class PackitApplication
fun main(args: Array<String>) {
runApplication<PackitApplication>(*args)
}
有人知道我错过了什么吗?这是spring上的第一个项目,我想在heroku上部署,所以请告诉我。
先谢谢你了。
3条答案
按热度按时间q3qa4bjr1#
我也遇到过同样的问题。我的问题配置是:
问题是,在IDEA中它可以运行,但不能不使用gradlew命令行。我检查了所有的旧项目。他们被建造和运行没有任何问题。区别在于版本。我之前的所有项目在上面提到的所有位置都有较低的版本。所以我认为问题出在版本上,但它是什么工具呢?Kotlin,斯普林,格雷德?我还没有找到有罪的(现在没有时间深入这个问题),但我找到了一个解决方案。如果你打开你的jar文件在任何存档(如。WinRAR),看看MANIFEST.MD,你会看到一行开始 *'Start-Class'**,有你的主类,它必须以'Kt'后缀结束,例如
初级班:me.sigest.fiveplus.FiveplusApplicationKt
在我失败的jar里,它不是。为了解决这个问题,我更改了build.gradle.kts文件中的代码,
尽管事实上我的类叫做MyMainClass(没有后缀Kt),
P.S.我所有的旧 Boot jar包含正确的名称与Kt的主类。我想问题出在Gradle
esyap4oy2#
我只需要做几件事就可以了:
1.在 build.gradle.kts 中,我删除了jar类型的任务,并添加了以下内容:
springBoot { mainClass.set(“com.markoid.packit.PackitApplicationKt”)}
1.我需要添加一个Procfile,如下所示:
web:java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/packit-1.0.0-SNAPSHOT.jar
这样的文件将告诉heroku我想要执行的特定命令来运行生成的jar。
mbjcgjjk3#
你有没有试过像错误消息中建议的那样更改main方法,即:public static void main(String[] args)