web-dev-qa-db-ja.com

IntelliJ IDEA GradleプロジェクトがAntlrで生成されたソースを認識/検索していません

単純なKotlin/GradleプロジェクトでAntlrを使用していますが、GradleビルドでAntlrソースが生成されていますが、プロジェクトにインポートすることはできません。

ご覧のとおり(左側)、クラス(Lexer/Parserなど)が生成されています。私もこれを設定しましたgenerated-src/antlr/mainディレクトリをソースルートとして。私が見るほとんどの質問はこれを解決策として挙げていますが、私はすでにそれを行っています。

この問題は、複数回の再構築(IDEAとCLIの両方)、および通常の「キャッシュの無効化と再起動」の問題の両方)の後も解決しません。

さらに、インポートの問題はCLIのGradleビルドにリストされているため、IDEAに限定されているようには見えません。

ここで何が欠けていますか?

enter image description here

これが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"
}
14
Craig Otis

ソースではなくコンパイル済みクラスを見つけるべきではありませんか?ターゲットディレクトリにantlrで生成されたクラスが表示されますか?

これを試してください。最初に、ANTLRで生成されたクラスを参照または使用せずにプロジェクトをビルドし、ビルドが成功した後でのみ、それらを参照するコードを追加します。

(言い換えれば、私が思うに、ANTLRソースは、それらを参照するコードの後に​​コンパイルされます。ビルドが失敗するため、コンパイルする機会はありません)

また、これが実際に当てはまる場合は、2つのアーティファクトに分割して、それを使用するコードを使用するアーティファクトの前にANTLRアーティファクトがビルドされていることを確認することでも解決できます。

1
paranoidAndroid

Daniel 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')
    }
}
1

これを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
1
Max Zavyrylin