[英]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文件后綴:
設置 - >編譯器
您是否使用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.