簡體   English   中英

IntelliJ IDEA Gradle項目無法識別/定位Antlr生成的源

[英]IntelliJ IDEA Gradle project not recognizing/locating Antlr generated sources

我在一個簡單的Kotlin / Gradle項目中使用Antlr,而我的Gradle構建生成Antlr源,它們無法導入到項目中。

如您所見(左側),正在生成類(Lexer / Parser等)。 我還將這個generated-src/antlr/main目錄配置為Source Root 我看到的大多數問題都將此列為解決方案,但我已經完成了。

多次重建(在IDEA和CLI上)並且遵循所有常見的“無效緩存和重新啟動”問題后,問題仍然存在。

此外,導入問題在CLI上的Gradle構建中列出,因此它似乎與IDEA無關。

我在這里錯過了什么?

在此輸入圖像描述

這是我最初創建項目時IDEA生成的build.gradle文件,以及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"
}

它不應該找到編譯的類而不是源? 你在目標目錄中看到antlr生成的類嗎?

試試這個:首先構建項目而不引用或使用任何ANTLR生成的類,並且只有在構建成功之后,才添加引用它們的代碼。

(換句話說,我認為發生的是,你的ANTLR源代碼是在引用它們的代碼之后編譯的。它們從來沒有機會編譯,因為構建失敗之前)

如果確實如此,你也可以通過分成兩個工件來解決它,並確保在使用它的代碼之前構建一個ANTLR。

嘗試在思想模塊喜歡這個崗位從丹尼爾DEKANY添加產生源在這里

apply plugin: "idea"
...
sourceSets.main.java.srcDir new File(buildDir, 'generated/javacc')
idea {
    module {
        // Marks the already(!) added srcDir as "generated"
        generatedSourceDirs += file('build/generated/javacc')
    }
}

嘗試將此添加到build.gradle

sourceSets {
  main.java.srcDirs += "${project.buildDir}/generated-src/antlr/main"
}

generateGrammarSource {
  arguments += ["-visitor", "-package", "com.craigotis.sprint.core.antlr"]
  outputDirectory = file("${project.buildDir}/generated-src/antlr/main/com/craigotis/sprint/core/antlr")
}

compileKotlin.dependsOn generateGrammarSource

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM