Start Spring Boot with classpath and class

There is an easy way to start a Spring Boot application by just calling

java -jar MyApplication-0.0.1.jar

This requires all dependencies to be bundled into the jar file and makes the jar file “fat”. That’s also the key word to search for when trying to create a complete jar.

But there is another way.

For example if I want to allow users to exchange the logging framework or allow the usage of different database drivers the dependencies can be exported into a separate directory using the following lines in the “build.gradle” build definition:

task copyRuntimeLibs(type: Copy, group: 'build', description: 'Export dependencies.') {
	into "build/deps"
	from configurations.runtimeClasspath

Executing this task will copy all the runtime dependencies, like Spring Boot and transient libraries, into a folder called “build/deps”.

I can then start my application from the project directory with the following command:

java -cp "build/libs/*;build/deps/*" my.application.MainClass

Hope this helps somebody.