Проект IntelliJ IDEA Gradle не распознает/не обнаруживает источники, созданные Antlr
Я использую Antlr в простом проекте Kotlin/Gradle, и, хотя моя сборка Gradle генерирует источники Antlr, они недоступны для импорта в проект.
Как вы можете видеть (слева), классы (Lexer/Parser и т.д.) Генерируются. Я также настроил этот generated-src/antlr/main
как исходный корень. Большинство вопросов, которые я вижу, представляют собой решение, но я уже это сделал.
Проблема сохраняется после нескольких перестроек (как в IDEA, так и в CLI), и после всех обычных проблем "Недействительный кэш и перезагрузка".
Кроме того, проблема импорта указана в сборке Gradle на CLI, поэтому она не кажется изолированной от 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"
}
Ответы
Ответ 1
Не следует ли находить скомпилированные классы, а не источники? Видите ли вы созданные классы antlr в целевом каталоге?
Попробуйте это: сначала создайте проект, не ссылаясь или используя какие-либо ANTLR-сгенерированные классы, и только после того, как сборка будет успешной, добавьте код, который ссылается на них.
(Другими словами, то, что я думаю, что это происходит, заключается в том, что ваши источники ANTLR скомпилированы после кода, который ссылается на них. У них никогда не будет возможности компилироваться, потому что сборка не выполняется)
Также, если это действительно так, вы можете решить это, разделив на два артефакта и убедитесь, что ANTLR один построен до того, который использует код, который его использует
Ответ 2
Попробуйте добавить сгенерированные источники в идее модуля, как это сообщение 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')
}
}
Ответ 3
Попробуйте добавить это в свой 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