使用Gradle将.ebextensions添加到Spring Boot Jar的简洁方法

时间:2016-08-29 13:43:04

标签: gradle spring-boot ebextensions

是否有一种干净的方法可以将其他根文件夹添加到使用默认bootRepackage生成的Spring Boot Jar文件中。在我的情况下,我需要AWS beanstalk的.ebextenions文件夹。

我知道我可以破解它 - 例如在bootRepackage之后添加另一个任务来解压缩,重新打包(再次),并重新压缩。有更干净的方式吗?

由于

..我试过的两种方式(不起作用):

jar {
    from('src/main/ebextensions') {
        into('ebextensions')
    }
}

bootRepackage {
    from('src/main/ebextensions') {
        into('ebextensions')
    }
}

5 个答案:

答案 0 :(得分:4)

我还在努力将Spring Boot部署到EBS ......

我认为必须将文件夹称为.ebextensions(注意前导点)。所以你会说into('./.ebextensions')而不是into('ebextensions')

或者,您可以尝试上传包含JAR和.ebextensions文件夹的ZIP文件:

task zip(type: Zip, dependsOn: bootRepackage) {
    from ('./.ebextensions') {
        into '.ebextensions'
    }
    from (jar.outputs.files) {
        into '.'
    }
    destinationDir project.buildDir
}

答案 1 :(得分:2)

使用Grails 3,我使用gradle clean dist创建一个包含.war用于EB发布的.zip文件,并使用Procfile来描述Spring Boot命令行。 .ebextensions文件夹位于项目的基本目录中,projectNameprojectVersionbuild.gradle文件中定义的变量:

task dist(type: Zip) {
    from war.outputs.files
    from "src/staging/Procfile" // this file allows us to control how ElasticBeanstalk starts up our app on its Java SE platform
    from('./.ebextensions') {
        into '.ebextensions'
    }
    rename { String fileName ->
        if (fileName == "${projectName}-${projectVersion}.war".toString()) {
            fileName.replace("${projectName}-${projectVersion}", "application")
        } else {
            fileName
        }
    }
}
dist.dependsOn assemble

Procfilesrc/staging的内容如下所示:

web: java -jar application.war

答案 2 :(得分:1)

如果将src / main / ebextensions文件夹移动到src / main / resources / .ebextensions,它将被jar任务自动复制到.jar的根目录(以及/ resources中的任何其他文件), EBS期望它,没有任何额外的脚本。

那就像你能得到的一样干净!

答案 3 :(得分:1)

I have my .ebextensions at the root of my project. This seems to work for me.

war { from ('./.ebextensions') { into '.ebextensions' } }

答案 4 :(得分:1)

对于Spring Boot 2(Gradle),如果.ebextensions位于项目的根目录,请使用以下任务:

bootJar {
    from('./.ebextensions') { into '.ebextensions' }
}

bootWar {
    from('./.ebextensions') { into '.ebextensions' }
}

这样Gradle会将.ebextensions复制到应用程序包的根目录中。

但最好使用convention over configuration并将.ebextensions文件夹移到src/main/resources内。资源目录的内容自动打包在/BOOT-INF/classes/中(不需要脚本)。解压缩后,.ebextensions目录将被EB部署脚本发现。