IntelliJ 新 JavaFX 项目发送工作 - InvalidModuleDescriptorException

IntelliJ New JavaFX Project dosent work - InvalidModuleDescriptorException

我刚刚安装: IntelliJ IDEA 2021.2.3(社区版)jdk-16.0.2

我在 IntelliJ 中创建了一个新项目:

文件->新建->项目

然后select:

语言:Kotlin,

构建系统:Gradle,

项目SDK,16版本16.0.2

我保留的其他所有内容。

创建项目。

我转到 HelloApplication.kt 并点击 main() 功能旁边的“播放”。

我收到这个错误:

Error occurred during initialization of boot layer java.lang.module.FindException: Error reading module: C:\Users\User\IdeaProjects\demo\build\classes\java\main Caused by: java.lang.module.InvalidModuleDescriptorException: Package com.example.demo not found in module

任何人都可以指导我如何让它工作吗?为什么该项目不能开箱即用?

正如 Andrey 在评论中指出的那样,这似乎是一个已知错误:

问题的根本原因在随附的 youtrack 案例中进行了解释。

这似乎是使用 Java 平台模块系统时在 Idea 中使用 Kotlin+Gradle 的普遍问题,而不仅仅是由Gradle+JavaFX+Kotlin“新建 JavaFX 项目”向导(这是我所假设的)。


我在我的环境 (OS X) 中尝试了它,按照您在问题中提供的相同步骤和版本,我得到了与您相同的结果。

IntelliJ IDEA 2021.2.3(社区版)目前在生成和使用 JavaFX+Gradle+Kotlin 项目的方式上存在一些错误和错误,使用 Idea New JavaFX project wizard.

处理这些问题的适当方法是在 Idea 问题跟踪器中为 IntelliJ 创建错误请求。

  1. 一个新项目(如问题中所述创建)将在您第一次尝试 运行 时运行,然后,它将失败并出现错误(也如问题中所述):

    Error occurred during initialization of boot layer java.lang.module.FindException: Error reading module: C:\Users\User\IdeaProjects\demo\build\classes\java\main Caused by: java.lang.module.InvalidModuleDescriptorException: Package com.example.demo not found in module

    • 要解决此问题,您可以在每次尝试 运行 IDE 中的应用程序之前 手动删除 目录.
  2. 当项目 运行s 时,它没有正确设置模块路径和 运行s JavaFX 从类路径将生成以下内容警告:

    (WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @4a072657').

    • 这是一个警告,您的应用程序仍然可以运行,但不推荐这样做。您可以忽略(风险自负)或修复 运行time 配置以在模块路径中包含 JavaFX 模块。
    • 请参阅以下问题中有关设置模块路径的信息:
  3. 我遇到的另一个问题是,如果你只使用默认值,如果已经有一个名为 demo 的项目,它会尝试创建一个名为 demo1 的包和包含该字符串的模块名称,导致检查警告:

    Module name component 'demo1' should avoid terminal digits

    • 这只是向导的另一个问题,与您的具体问题无关。有关详细信息,请参阅 #VersionsInModuleNames
    • 使用向导时,请确保在创建项目之前将用于创建模块名称的任何默认项目名称更改为有效名称(例如,不以数字结尾的名称)。

建议

希望这些只是短期问题,Intellij 会在适当的时候解决。

我在 Idea 中尝试了一个新项目,使用 Kotlin+Maven 而不是 Kotlin+Gradle,它无需在每次执行后手动删除构建目录即可运行。我建议,如果您只是在试验,那么就使用 Kotlin+Maven+JavaFX 组合,至少在 Kotkin+Mavaen+Gradle 向导运行得更好之前。​​

如果构建系统对您很重要并且应该 Gradle,那么您现在需要自己做一些更多的工作。尝试此答案中建议的一些修复,或者查看 openjfx.io 中的一些其他信息,或者查看一些使用 Gradle 的开源 JavaFX 项目,并可能进行更多自定义更改。

或者,查看使用 TornadoFX 的演示项目,这是一个基于 JavaFX Kotlin 的框架。 TornadoFX 有一个 quick start,可能会有帮助,但我没有使用它(但是,我认为它是基于 Maven 的,而不是基于 Gradle)。