![](/img/trans.png)
[英]How to integrate generated sources in IntelliJ IDEA when using Gradle?
[英]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.