繁体   English   中英

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

[英]IntelliJ + groovy DSL: How to exclude files from being compiled by groovy plugin?

我正在开发一个Java Web项目,该项目使用Liquibase groovy DSL来管理数据库更改。 为了本主题,它可以是使用*.groovy文件作为源的任何其他第三方库。 该项目是用gradle建造的。 src/main/resources文件夹下的一个模块( dao-base )中,我有groovy文件( changelog01.groovy, master_changelog.groovy等)。 这些文件应该在运行时由liquibase jar加载。

现在,当我尝试在IntelliJ中创建项目时,它会给出以下错误消息:

Groovyc:无法编译Groovy文件:没有为模块'dao-base'定义Groovy库。

我知道groovy插件检测到*.groovy文件,尝试编译它们并且不出所料地失败。 这些是groovy DSL文件,只能由第三方liquibase解析器加载,我不需要IntelliJ的groovy插件来尝试编译它们。

我设法提出了两个部分解决方案:1。禁用intellij中的groovy插件。 这个解决方案的问题是gradle插件依赖于groovy插件,因此在禁用groovy插件时会自动禁用。 我需要启用gradle插件。 2.排除项目设置中的src/main/resources文件夹 - > modules - > dao-base (my module) - > sources选项卡。 这个解决方案的问题是,当我构建项目并部署到tomcat时,资源文件夹中的文件丢失,因为运行时需要文件中的文件,所以当战争加载时我得到文件未找到异常。

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

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

设置 - >编译器

IntelliJ IDEA编译器设置

您是否使用Gradle Idea插件生成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生成项目时,您不必记住手动执行此操作。

我面临同样的问题。 在成功编译以及执行我的项目之后,我从设置中禁用了groovy插件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM