是否有一种干净的方法可以将其他根文件夹添加到使用默认bootRepackage生成的Spring Boot Jar文件中。在我的情况下,我需要AWS beanstalk的.ebextenions文件夹。
我知道我可以破解它 - 例如在bootRepackage之后添加另一个任务来解压缩,重新打包(再次),并重新压缩。有更干净的方式吗?
由于
..我试过的两种方式(不起作用):
jar {
from('src/main/ebextensions') {
into('ebextensions')
}
}
bootRepackage {
from('src/main/ebextensions') {
into('ebextensions')
}
}
答案 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
文件夹位于项目的基本目录中,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
Procfile
中src/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部署脚本发现。