我正在开发一个Java Web项目,该项目使用Liquibase groovy DSL来管理数据库更改。
为了本主题,它可以是使用*.groovy
文件作为源的任何其他第三方库。
该项目是用gradle建造的。
在我dao-base
文件夹下的一个模块(src/main/resources
)中,我有常规文件(changelog01.groovy, master_changelog.groovy
等)。这些文件应该在运行时由liquibase jar加载。
现在,当我尝试在IntelliJ中创建项目时,它会显示以下错误消息:
Groovyc:无法编译Groovy文件:没有定义Groovy库 模块'dao-base'。
我知道groovy插件会检测*.groovy
个文件,尝试编译它们并且不出所料地失败。这些是groovy DSL文件,只能由第三方liquibase解析器加载,我不需要IntelliJ的groovy插件来尝试编译它们。
我设法提出了两个部分解决方案:
1.禁用intellij中的groovy插件。
这个解决方案的问题是gradle插件依赖于groovy插件,因此在禁用groovy插件时会自动禁用。我需要启用gradle插件。
2.排除项目设置中的src/main/resources
文件夹 - >模块 - > dao-base
(我的模块) - >来源标签。
这个解决方案的问题在于,当我构建项目并部署到tomcat时,资源文件夹中的文件丢失了,因为运行时需要文件中的文件,所以当战争加载时我得到文件未找到异常。
我希望有人能为这个问题找到更好的解决方案。
答案 0 :(得分:14)
尝试从编译器的资源列表中删除groovy文件后缀:
设置 - >编译器
答案 1 :(得分:0)
您是否使用Gradle Idea Plugin生成IntelliJ项目?如果是这样,你可以通过gradle将这些groovy文件添加到IntelliJ中的编译器资源列表中,方法是将它添加到build.gradle:
idea {
project {
// customize the .ipr file generation.
ipr {
withXml { xmlProvider ->
def project = xmlProvider.asNode()
// Add appropriate groovy files to the compiler resources. These files will not be compiled by the groovy compiler but will be copied to the classes directory during compilation.
def compilerSettings = project.component.find { it.@name == 'CompilerConfiguration' }
compilerSettings.wildcardResourcePatterns*.appendNode('entry', [name: '*/changelog*.groovy'])
compilerSettings.wildcardResourcePatterns*.appendNode('entry', [name: '*/master_changelog.groovy'])
}
}
}
}
这很好,因为当您从gradle生成项目时,您不必记住手动执行此操作。
答案 2 :(得分:-1)
我遇到了同样的问题。在成功编译以及执行我的项目之后,我从设置中禁用了groovy插件。