X(Twitter) Zenn GitHub RSS 共有

Spring Bootでwarから動的にファイルを除外する

作成日時:2025-08-04
更新日時:2025-08-04

表題通り。
納品時などにおいて、warに含めてはならないファイルがあったり。

ビルド時に除外するように設定できる。

基本

build.gradleに以下の設定を追加。

war {
    rootSpec.exclude('**/foo/**')
    archiveFileName = 'something.war'
}

rootSpec.excludeで対象のファイル/ディレクトリをwarから除外できる。

応用

Groovyを使えば動的に削除対象を設定可能。
ファイルやプロパティなどから削除対象を定義したりできる。

以下、サンプル。

ケース:
fooとbarディレクトリをwarから除外する。
ただし、ビルド時のプロパティfizzに指定されたディレクトリは除外しないこととする。

// 除外対象ディレクトリリスト
def excludeTargetList = ['foo', 'bar']

// プロパティを取得。指定されたディレクトリは除外対象とする。
if (project.hasProperty('fizz')) {
    excludeTargetList.removeIf {it == project.getProperty('fizz')}
}

war {
    // 除外対象ディレクトリリストの内容をもとに除外設定
    excludeTargetList.each { target ->
        rootSpec.exclude('**/${target}/**')
    }
    archiveFileName = 'something.war'
}

下記のコマンドでビルドすれば、barディレクトリのみがwarから除外される。

gradlew war -Pfizz=foo