Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clean way of adding .ebextensions to Spring Boot Jar using Gradle

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')
    }
}
like image 700
vicsz Avatar asked Aug 29 '16 13:08

vicsz


4 Answers

I have my .ebextensions at the root of my project. This seems to work for me.

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

like image 158
mbw Avatar answered Nov 19 '22 11:11

mbw


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 if you prefer convention over configuration, 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.

like image 34
naXa Avatar answered Nov 19 '22 11:11

naXa


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
}
like image 4
Kevin Chen Avatar answered Nov 19 '22 10:11

Kevin Chen


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!

like image 2
Jed Allen Avatar answered Nov 19 '22 10:11

Jed Allen