10

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

我知道我可以破解它——例如在 bootRepackage 之后添加另一个任务来解压缩、重新打包(再次)和重新压缩。有没有更清洁的方法?

谢谢

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

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

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

6 回答 6

6

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

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

或者

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

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

但是,如果您更喜欢约定而不是配置,请将.ebextensions文件夹移到里面src/main/resources。资源目录的内容会自动打包进去/BOOT-INF/classes/(不需要脚本)。并且该.ebextensions目录在解压时会被 EB 部署脚本发现。

于 2019-03-02T18:28:43.790 回答
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
}
于 2016-09-09T03:15:12.143 回答
2

在 Grails 3 中,我使用gradle clean dist创建一个包含 .war 的 .zip 文件用于 EB 分发,并使用 aProcfile来描述 Spring Boot 命令行。一个.ebextensions文件夹位于我的项目的基本目录中,projectName并且projectVersion是文件中定义的变量build.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

Procfilein的内容src/staging如下所示:

web: java -jar application.war
于 2017-02-18T04:16:24.547 回答
2

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

这就是你能得到的最干净的东西!

于 2017-05-10T22:30:47.537 回答
2

我的 .ebextensions 在我的项目的根目录中。这似乎对我有用。

战争 { 从 ('./.ebextensions') { 到 '.ebextensions' } }

于 2017-10-30T15:31:30.170 回答
0

2021 年 9 月

我试图在我的 jar 中添加 .ebextensions 文件夹,但似乎弹性 beanstalk 不再喜欢它了。

相反,我必须创建一个包含 jar 和 .ebextensions 文件夹的 zip 文件。

像这样

~/myapp.zip
|-- myapp.jar
|-- .ebextensions/

文档

这是我的 gradle kts 代码:

val jarFilename = "myapp.jar"

val packageZip by tasks.register<Zip>("packageZip") {
    dependsOn("bootJar")
    archiveFileName.set("myapp.zip")
    destinationDirectory.set(layout.buildDirectory.dir("libs"))

    from("$buildDir/libs/$jarFilename")

    from("../.ebextensions") {
        into(".ebextensions")
    }
    from("../.platform") {
        into(".platform")
    }
}

tasks.register<Delete>("cleanLibs") {
    delete("$buildDir/libs/")
}

tasks.named<BootJar>("bootJar") {
    dependsOn("cleanLibs")

    this.archiveFileName.set(jarFilename)

    finalizedBy(packageZip)
}
于 2021-09-13T11:12:17.637 回答