Is there a clean way of adding additional root folders to a Spring Boot Jar file generated using the default bootRepackage. In my case I need the .ebextenions folder for AWS beanstalk.
I know I can hack it -- for example add another task after bootRepackage to unzip, repackage (again), and re-zip. Is there a cleaner way ?
Thanks
.. the 2 ways that I've tried (that don't work) :
jar {
from('src/main/ebextensions') {
into('ebextensions')
}
}
bootRepackage {
from('src/main/ebextensions') {
into('ebextensions')
}
}
I'm still working on deploying Spring Boot to EBS myself...
I think the folder has to be called .ebextensions
(notice the leading dot). So you would say into('./.ebextensions')
instead of into('ebextensions')
.
Alternatively, you might try uploading a ZIP file containing your JAR and your .ebextensions
folder:
task zip(type: Zip, dependsOn: bootRepackage) {
from ('./.ebextensions') {
into '.ebextensions'
}
from (jar.outputs.files) {
into '.'
}
destinationDir project.buildDir
}
If you move your src/main/ebextensions folder to src/main/resources/.ebextensions, it will be automatically copied by the jar task to the root of the .jar (along with any other files in /resources), where EBS expects it, without any additional scripting.
That's about as clean as you can get!
With Grails 3, I use gradle clean dist
to create a .zip file containing a .war for EB distribution, and use a Procfile
to describe the Spring Boot command line. An .ebextensions
folder is in the base directory of my project, and projectName
and projectVersion
are variables defined in the build.gradle
file:
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
where the contents of the Procfile
in src/staging
looks like this:
web: java -jar application.war
I have my .ebextensions at the root of my project. This seems to work for me.
war { from ('./.ebextensions') { into '.ebextensions' } }
For Spring Boot 2 (Gradle) if .ebextensions
is located at the root of your project, use the following task:
bootJar {
from('./.ebextensions') { into '.ebextensions' }
}
or
bootWar {
from('./.ebextensions') { into '.ebextensions' }
}
This way Gradle will copy .ebextensions
into the root of the application package.
But prefer convention over configuration and move .ebextensions
folder inside src/main/resources
. The content of resources directory is packaged automatically in /BOOT-INF/classes/
(no scripting required). And the .ebextensions
directory will be discovered by EB deployment scripts when unpacked.
来源:https://stackoverflow.com/questions/39207803/clean-way-of-adding-ebextensions-to-spring-boot-jar-using-gradle