Error: Main method is not static in class. Kotlin Project
Error: Main method is not static in class. Kotlin Project
我需要创建一个可运行的 Jar 文件,它是来自 Kotlin 项目的控制台应用程序。我使用 gradle init 设置了这个项目。我通过将 main 方法移出 class,将其包装在伴随对象中,并使用 JvmStatic 注释尝试了我可以在网上找到的所有解决方案,但我仍然不断收到错误消息“错误:Main 方法不是静态的” class com.yk.ConsoleGradle.App,请将主要方法定义为:
public static void main(String[] args)"
我正在使用 ./gradlew jar 来构建项目
class App {
val greeting: String
get() {
return "Hello World!"
}
fun main(args: Array<String>){
println("Hello kotlin")
}
}
application {
// Define the main class for the application.
mainClass.set("com.yk.ConsoleGradle.AppKt")
}
tasks.jar{
manifest {
attributes(mapOf("Implementation-Title" to project.name,
"Implementation-Version" to project.version, "Main-Class" to "com.yk.ConsoleGradle.App" ))
}
}
这是 jar tf 的输出
jar tf /ConsoleGradle/app/build/libs/app-1.0.1.jar
META-INF/
META-INF/MANIFEST.MF
META-INF/app.kotlin_module
com/
com/yk/
com/yk/ConsoleGradle/
com/yk/ConsoleGradle/AppKt.class
com/yk/ConsoleGradle/App.class
感谢任何帮助。
我不知道这是否是您正在做的事情的正确方法,但是怎么样
class App {
val greeting: String
get() {
return "Hello World!"
}
companion object {
@JvmStatic
fun main(args: Array<String>){
println("Hello kotlin")
}
}
}
companion object
使函数可通过 class 而不是通过实例访问,并且 JvmStatic
注释为 Java interop[=14 生成静态方法=]
如果您不想在 App class 中声明主函数,您可以使用以下代码创建一个 App.kt 文件:
class App {
val greeting: String
get() {
return "Hello World!"
}
}
fun main(args: Array<String>){
println("Hello kotlin")
}
您还需要将 gradle jar 任务更新为:
jar {
manifest {
attributes "Implementation-Title": project.name
attributes "Implementation-Version": project.version
attributes "Main-Class": "com.yk.ConsoleGradle.AppKt"
}
}
请注意 Main-Class 被指定为 AppKt 而不是 App。
这是因为 main 函数是一个 top-level 函数,对于 App.kt 中的 top-level 函数,Kotlin 编译器创建了一个名为 AppKt.class.
的 class
我需要创建一个可运行的 Jar 文件,它是来自 Kotlin 项目的控制台应用程序。我使用 gradle init 设置了这个项目。我通过将 main 方法移出 class,将其包装在伴随对象中,并使用 JvmStatic 注释尝试了我可以在网上找到的所有解决方案,但我仍然不断收到错误消息“错误:Main 方法不是静态的” class com.yk.ConsoleGradle.App,请将主要方法定义为: public static void main(String[] args)"
我正在使用 ./gradlew jar 来构建项目
class App {
val greeting: String
get() {
return "Hello World!"
}
fun main(args: Array<String>){
println("Hello kotlin")
}
}
application {
// Define the main class for the application.
mainClass.set("com.yk.ConsoleGradle.AppKt")
}
tasks.jar{
manifest {
attributes(mapOf("Implementation-Title" to project.name,
"Implementation-Version" to project.version, "Main-Class" to "com.yk.ConsoleGradle.App" ))
}
}
这是 jar tf 的输出
jar tf /ConsoleGradle/app/build/libs/app-1.0.1.jar
META-INF/
META-INF/MANIFEST.MF
META-INF/app.kotlin_module
com/
com/yk/
com/yk/ConsoleGradle/
com/yk/ConsoleGradle/AppKt.class
com/yk/ConsoleGradle/App.class
感谢任何帮助。
我不知道这是否是您正在做的事情的正确方法,但是怎么样
class App {
val greeting: String
get() {
return "Hello World!"
}
companion object {
@JvmStatic
fun main(args: Array<String>){
println("Hello kotlin")
}
}
}
companion object
使函数可通过 class 而不是通过实例访问,并且 JvmStatic
注释为 Java interop[=14 生成静态方法=]
如果您不想在 App class 中声明主函数,您可以使用以下代码创建一个 App.kt 文件:
class App {
val greeting: String
get() {
return "Hello World!"
}
}
fun main(args: Array<String>){
println("Hello kotlin")
}
您还需要将 gradle jar 任务更新为:
jar {
manifest {
attributes "Implementation-Title": project.name
attributes "Implementation-Version": project.version
attributes "Main-Class": "com.yk.ConsoleGradle.AppKt"
}
}
请注意 Main-Class 被指定为 AppKt 而不是 App。
这是因为 main 函数是一个 top-level 函数,对于 App.kt 中的 top-level 函数,Kotlin 编译器创建了一个名为 AppKt.class.