2013-07-18 101 views
6

我正在使用Liquibase groovy DSL來改變managae的Java web項目。 爲了這個主題,它可以是任何其他第三方庫,它使用*.groovy文件作爲源。 該項目是用gradle構建的。 在我的一個模塊(dao-base)下src/main/resources文件夾我有groovy文件(changelog01.groovy, master_changelog.groovy等)。這些文件應該在運行時由liquibase jar加載。IntelliJ + groovy DSL:如何排除groovy插件編譯的文件?

現在,當我試圖在的IntelliJ項目它提供了以下錯誤信息:

groovyc的:不能編譯Groovy文件:Groovy中沒有圖書館是 模塊「道基」定義。

我知道groovy插件檢測到*.groovy文件,試圖編譯它們,並且意料之外的失敗。這些是groovy的DSL文件,應該只加載第三方liquibase解析器,我不需要IntelliJ的groovy插件來嘗試編譯它們。

我設法想出了2個部分解決方案: 1.禁用intellij中的groovy插件。 這個解決方案的問題在於,gradle插件依賴於groovy插件,因此在禁用groovy插件時會自動禁用。我需要啓用gradle插件。 2.在項目設置 - >模塊 - >dao-base(我的模塊) - > sources選項卡中排除src/main/resources文件夾。 這個解決方案的問題是,當我構建項目並部署到tomcat時,資源文件夾中的文件缺失,並且由於其中的文件在運行時是必需的,所以在加載戰爭時,我找不到文件異常。

我希望有人能想出一個更好的解決方案來解決這個問題。

回答

14

嘗試從編譯器的資源列表中刪除常規文件後綴:

設置 - >編譯器

IntelliJ IDEA Compiler Settings

+1

謝謝。這解決了我的問題。這很簡單,但不知何故,我忽略了這一點。 –

0

你生成與Gradle Idea Plugin的項目的IntelliJ?如果是的話,你可以將這些常規文件的IntelliJ的gradle通過加入這個添加到編譯器的資源列表中的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 { [email protected] == 'CompilerConfiguration' } 
     compilerSettings.wildcardResourcePatterns*.appendNode('entry', [name: '*/changelog*.groovy']) 
     compilerSettings.wildcardResourcePatterns*.appendNode('entry', [name: '*/master_changelog.groovy']) 
     } 

    } 
    } 
} 

這是很好的,因爲你不會要記住,當你生成手動執行此操作該項目來自Gradle。

-1

我正面臨同樣的問題。在成功編譯以及執行我的項目之後,我禁用了Groovy插件。

+0

它也會禁用IntelliJ中的Gradle功能。餿主意。 – aldrael