Spring Boot 使用Gradle将.ebextensions添加到Sping Boot Jar的干净方法

uinbv5nw  于 2023-04-06  发布在  Spring
关注(0)|答案(7)|浏览(119)

有没有一种干净的方法可以将额外的根文件夹添加到使用默认bootRepackage生成的Sping Boot Jar文件中。在我的情况下,我需要AWS beanstalk的.ebextenions文件夹。
我知道我可以破解它--例如在bootRepackage之后添加另一个任务来解压缩,重新打包(再次),然后重新压缩。
谢谢
我尝试过的两种方法(不起作用):

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

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

lokaqttq1#

对于Sping 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部署脚本发现。

4ktjp1zp

4ktjp1zp2#

我自己还在努力将Sping 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
}
kfgdxczn

kfgdxczn3#

如果您将src/main/ebextensions文件夹移动到src/main/resources/.ebextensions,则jar任务将自动将其复制到.jar的根目录(沿着/resources中的任何其他文件),而无需任何额外的脚本。
这是你能弄到的最干净的了!

5tmbdcev

5tmbdcev4#

在我的项目中,. eb扩展名是根文件,这似乎对我很有效。
[2019 - 04 - 22]【2019 - 04 - 22】【2019 - 04 - 22】【2019 - 04 - 22】【2019 - 04 - 22】【2019 - 04 - 22】【2019 - 04 - 22】【2019 - 04 - 04】【2019 - 04 - 04】【2019 - 04 - 04】【2019 - 04】【2019 - 04 - 04】【2019 - 04】【2019 - 04】【2019 - 04】【2019 - 04】【2019 - 04】【2019 - 04】【2019 - 04】【2019 - 04】【2019】【2019 - 04】【2019】【2019 - 04】【2019】【

cx6n0qe3

cx6n0qe35#

在Grails 3中,我使用gradle clean dist创建了一个包含EB分发的.war的.zip文件,并使用Procfile描述Sping Boot 命令行。.ebextensions文件夹位于我的项目的基目录中,projectNameprojectVersion是在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

其中src/stagingProcfile的内容如下所示:

web: java -jar application.war
cbwuti44

cbwuti446#

2021年9月

我尝试在我的jar中添加.ebextensions文件夹,但似乎弹性豆茎不喜欢它了。
相反,我必须创建一个zip文件,其中包含jar和.ebextensions文件夹。
就像这样

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

Doc
以下是我的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)
}
ckocjqey

ckocjqey7#

由于所有提供的答案都没有解决这个问题,我找到了解决这个问题的另一个方法。

artifacts:
  files:
    - app.jar
    - .ebextensions/**/*

相关问题