簡體   English   中英

在Gradle Application Plugin中部署其他文件

[英]Deploy additional files in Gradle Application Plugin

我有一個小的Java / Gradle項目。 我正在使用Application插件創建一個zip分發(使用distZip任務)。 使用標准配置,我在我的zip文件中獲得以下目錄:

/ bin - 啟動應用程序的腳本進入此處
/ lib - 包含JAR文件中的項目代碼和所有依賴項JAR文件。

麻煩的是我想要第三個目錄: / conf我可以放置我的配置文件(而不是將它們打包在我的應用程序JAR文件中)。

我想這是一個非常常見的要求,因為像log4j.xml和hibernate.properties這樣的東西會更好地放在JAR文件之外。 我只是無法弄清楚如何自定義Application插件的行為來執行此操作。

幾個月后我重新討論了這個問題,我終於找到了一個優雅的解決方案。 應將以下代碼添加到gradle文件中:

distZip {
    into(project.name) {
        from '.'
        include 'conf/*'
    }
}

這為distZip任務添加了額外的包含。 這會將“conf”目錄(包括內容)復制到Zip分發中。

生成的zip文件包含一個與項目名稱相同的目錄。 這就是需要“進入”部分的原因。

實際上,在項目的src目錄下創建一個dist目錄。 當運行installApp或distZip時,應用程序插件(在applicationDistribution下)會復制此目錄中的任何內容。

或編輯applicationDistribution以執行其他操作,如果簡單副本不夠用。

對我來說,簡單

applicationDistribution.from("src/main/config/") {
    into "config"
}

做了這個工作。 當然,您需要在代碼中正確加載屬性。 特別是如果您將它們從可通過類路徑使用的src / main / resources移動到新位置。 我通過添加指向配置文件的命令行參數來規避這一點。

我不確定您是否可以自定義應用程序插件,我從未使用過它。 然而,還有其他方法可以實現您想要實現的目標。

您可以像這樣創建一個/conf目錄:

confDir = new File("$buildDir/conf")

然后,您可以將所需的文件復制到此目錄中,如下所示:

task copyConfFiles(type: Copy) {
   from _wherever your files reside_
   into confDir
   include('**/*.properties') // your configuration files 
}

然后,您可以將此復制任務掛鈎到此過程中:

distZip.dependsOn copyConfFiles

如果你不想在最終的拉鏈中使用你的配置,你可以這樣做:

distZip {
   exclude('**/*.properties') // your configuration files
}

同樣,可能有更好的方法。 這是一種方式。

OP的自我回答可能對他的用例有好處,但我想改進一些事情:

  1. 他的回答表明他有一個與build.gradle平行的目錄conf Maven 標准目錄布局中沒有這樣的東西。 普遍的共識是在文檔中暗示有一個src/main/conf

如果工件構建還有其他貢獻源,則它們將位於其他子目錄下:例如,src / main / antlr將包含Antlr語法定義文件。

  1. 目標目錄名稱不是注釋中指出的project.name

  2. 如果需要資源過濾,並且經常需要,則需要單獨的任務。 在本地開發期間,可以運行此任務以生成過濾的文件。 分發只會使用此任務的輸出(與OP的答案不同,這也使得conf可用於tar分配)。

     def props = new Properties() file("src/main/filters/application.properties") .withInputStream { props.load(it) } import org.apache.tools.ant.filters.ReplaceTokens task copyConf(type: Copy) { from("src/main/conf/") into("$buildDir/conf") filesMatching("**/*.y*ml") { filter(tokens: props, ReplaceTokens) } } distributions { main { contents { from(copyConf) { into("conf") } } } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM