gpt4 book ai didi

java - 无法在 Intellij 中指定主 list 属性

转载 作者:行者123 更新时间:2023-11-29 04:20:11 25 4
gpt4 key购买 nike

我正在尝试为我一直在使用的 api 生成一个可执行 jar。我已经能够使用 localhost 在本地进行调试,但是当我尝试从命令行运行生成的 jar 工件时,我收到错误 no main manifest attribute, in api.jar。我已经阅读了相关的 SO 问题 herehere ,但他们建议的更改似乎没有效果。我的项目结构如下:

project structure

当我尝试在工件向导中导航时选择主类时,我可以一直突出显示 main 类,但 OK 按钮被禁用。

OK button disabled

最后,当我尝试通过右键单击主类名称并选择 Copy Reference 并粘贴剪贴板值来在 list 文件中手动指定主类时,我得到的错误是无效的主类:

Invalid main class

我的实际主类包含在下面。感谢您的帮助。

package api

import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication

@SpringBootApplication
open class KotlinSpringJpaPostgresqlApplication

fun main(args: Array<String>) {
SpringApplication.run(KotlinSpringJpaPostgresqlApplication::class.java, *args)
}

最后,我的代码可用 here如果您想尝试在本地运行它。

最佳答案

您需要将带有大写字母 KKt 附加到包含您的 main 方法的文件名。这是必需的,因为 Kotlin 编译为 Java 字节码的方式。 Kotlin 中的 fun main() 函数不附加任何类,但 Java 总是需要一个类,并且不支持无类函数。

请注意,文件名 在这里很重要(在您的问题中是 api.kt)。我建议只创建一个文件 Main.kt 并将您的主要功能移到那里。它将被编译为一个 MainKt 类,您应该从您的 list 中引用它。

我希望您手动创建的 MANIFEST.MF 文件会被构建过程覆盖。您是否解压了最终的 jar 文件并检查了 MANIFEST.MF 是否符合您的预期?

与其自己编写 MANIFEST.MF,不如让您的构建系统为您处理:

对于 Maven:

<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>api.KotlinSpringJpaPostgresqlApplicationKt</mainClass>
</manifest>
</archive>
</configuration>

对于 Gradle :

jar {
manifest {
attributes 'Main-Class': 'api.KotlinSpringJpaPostgresqlApplicationKt'
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}

关于java - 无法在 Intellij 中指定主 list 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49844100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com