IntelliJ IDEA Gradle项目无法识别/定位Antlr生成的源

Cra*_*tis 13 java intellij-idea gradle kotlin antlr4

我在一个简单的Kotlin/Gradle项目中使用Antlr,而我的Gradle构建生成Antlr源,它们无法导入到项目中.

如您所见(左侧),正在生成类(Lexer/Parser等).我还将此generated-src/antlr/main目录配置为源根目录.我看到的大多数问题都将此列为解决方案,但我已经完成了.

多次重建(在IDEA和CLI上)并且遵循所有常见的"无效缓存和重新启动"问题后,问题仍然存在.

此外,导入问题在CLI上的Gradle构建中列出,因此它似乎与IDEA无关.

我在这里错过了什么?

在此输入图像描述

这是build.gradle我最初创建项目时IDEA生成的文件,以及IDEA用于项目/工作区同步的文件.

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.2.50'
}

group 'com.craigotis'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

apply plugin: 'antlr'

dependencies {
    antlr "org.antlr:antlr4:4.5"
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.2.0'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)

par*_*oid 1

它不应该找到已编译的类而不是源吗?你在目标目录中看到antlr生成的类了吗?

试试这个:首先在不引用或使用任何 ANTLR 生成的类的情况下构建项目,只有在构建成功后,然后添加引用它们的代码。

(换句话说,我认为发生的情况是,您的 ANTLR 源代码是在引用它们的代码之后编译的。它们永远没有机会编译,因为之前构建失败)

另外,如果确实是这种情况,您也可以通过分成两个工件来解决它,并确保 ANTLR 工件是在使用它的代码的工件之前构建的

  • 我不认为 Antlr 插件会编译源代码 - 它只是“生成”Java 源代码,然后您的构建工具/环境可以按照他们的选择进行集成。 (2认同)