9

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

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

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

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

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

我希望有人可以为这个问题提出更好的解决方案。

4

3 回答 3

18

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

设置 -> 编译器

IntelliJ IDEA 编译器设置

于 2013-07-19T22:23:18.437 回答
0

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

于 2013-07-20T02:45:02.403 回答
-1

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

于 2013-09-02T13:05:57.350 回答