[英]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.