使用 Gradle 将 .ebextensions 添加到 Spring Boot Jar 的干净方式
Posted
技术标签:
【中文标题】使用 Gradle 将 .ebextensions 添加到 Spring Boot Jar 的干净方式【英文标题】:Clean way of adding .ebextensions to Spring Boot Jar using Gradle 【发布时间】:2017-01-05 13:50:03 【问题描述】:有没有一种干净的方法可以将额外的根文件夹添加到使用默认 bootRepackage 生成的 Spring Boot Jar 文件中。在我的情况下,我需要 AWS beanstalk 的 .ebextenions 文件夹。
我知道我可以破解它——例如在 bootRepackage 之后添加另一个任务来解压缩、重新打包(再次)和重新压缩。有没有更清洁的方法?
谢谢
.. 我尝试过的两种方法(不起作用):
jar
from('src/main/ebextensions')
into('ebextensions')
bootRepackage
from('src/main/ebextensions')
into('ebextensions')
【问题讨论】:
【参考方案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部署脚本发现。
【讨论】:
(SO poll)请在此处发表评论:您选择了 2 个解决方案中的哪一个? 新平台“Amazon Linux 2”不再解析 Jar 中的文件 docs.aws.amazon.com/elasticbeanstalk/latest/dg/…【参考方案2】:我自己还在努力将 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
【讨论】:
嗨,我的 Spring Boot 项目的根文件夹中有我的 .ebextensions 文件夹,我将上面的代码复制粘贴到我的 build.gradle 中,但我没有看到我的 .ebextensions 文件夹在我的 jar 文件的根文件夹中。我错过了什么?谢谢 这是一个隐藏文件夹,可能不会马上显示出来。【参考方案3】:如果您将 src/main/ebextensions 文件夹移动到 src/main/resources/.ebextensions,jar 任务将自动将其复制到 .jar 的根目录(以及 /resources 中的任何其他文件),在 EBS 期望的地方,无需任何额外的脚本。
这就是你能得到的最干净的东西!
【讨论】:
【参考方案4】:我的 .ebextensions 在我的项目的根目录中。这似乎对我有用。
战争 来自('./.ebextensions') 进入“.ebextensions”
【讨论】:
【参考方案5】:对于 Grails 3,我使用 gradle clean dist
创建一个包含 .war 的 .zip 文件以用于 EB 分发,并使用 Procfile
来描述 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
src/staging
中Procfile
的内容如下所示:
web: java -jar application.war
【讨论】:
【参考方案6】:2021 年 9 月
我尝试在我的 jar 中添加 .ebextensions 文件夹,但似乎弹性豆茎不再喜欢它了。
相反,我必须创建一个包含 jar 和 .ebextensions 文件夹的 zip 文件。
像这样
~/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)
【讨论】:
以上是关于使用 Gradle 将 .ebextensions 添加到 Spring Boot Jar 的干净方式的主要内容,如果未能解决你的问题,请参考以下文章
在 Elastic Beanstalk 中,如何使用 .ebextensions 将现有安全组设置为负载均衡器?
如何在spring boot gradle项目的.jar根目录中构建一个文件夹?
如何使用 .ebextensions 将 Application Load Balancer 固定响应添加到 AWS Elastic Beanstalk