首页 > 解决方案 > Spring Boot Gradle 从构建的 jar 中创建一个 tar 文件,不包括资源

问题描述

我想从 Spring Boot 应用程序中的构建包中创建一个 tar 文件。我的构建文件如下所示:

apply plugin: 'distribution'

distributions {
    main {
        baseName = "${project.name}"
        contents {
            into('/conf'){
                from('src/main/resources')
            }
            into('/bin'){
                from('libs')
            }
        }
    }
}

tasks.withType(Tar) {
    compression = Compression.GZIP
    extension = "tar.gz"
}

configurations {
    customArch
}

artifacts {
    customArch file(distTar.archivePath)
}

我想要一个包含以下目录结构的 tar.gz 文件:

tar.gz:
   - bin
       - project.jar
   - conf
       - application.yaml
       - anything else from the resources folder

但是,当我构建 pakcage 时,它​​给了我一个包含源文件的 tar 文件和一个带有 jar 文件的单独的 lib 目录。如果您能帮助我了解问题所在,我将不胜感激。我怀疑由于某种原因发行版在构建之前运行,所以它没有可用的 lib 目录。

标签: javaspring-bootgradle

解决方案


要实现目标目录结构,您应该按如下方式更改分发闭包:(注意:我假设您的 application.yaml 位于资源目​​录下。)

distributions {
    main {
        baseName = "${project.name}"
        contents {
            into('/conf'){
                from('src/main/resources')
            }
            into('/bin'){
                from('build/libs')
            }
        }
    }
}

并且要在制作 tar 文件之前构建 jar 文件,您应该修改distTar任务如下:

distTar {
    dependsOn bootJar
}

推荐阅读