IntelliJ + groovy DSL:如何排除文件被groovy插件编译?

时间:2013-07-18 14:33:18

标签: java groovy intellij-idea liquibase groovydsl

我正在开发一个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时,资源文件夹中的文件丢失了,因为运行时需要文件中的文件,所以当战争加载时我得到文件未找到异常。

我希望有人能为这个问题找到更好的解决方案。

3 个答案:

答案 0 :(得分:14)

尝试从编译器的资源列表中删除groovy文件后缀:

设置 - >编译器

IntelliJ IDEA Compiler Settings

答案 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插件。