diff --git a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/deployment/efficient.adoc b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/deployment/efficient.adoc index d5b2c435483e..b6208cd2cb2a 100644 --- a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/deployment/efficient.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/deployment/efficient.adoc @@ -6,30 +6,27 @@ [[deployment.efficient.unpacking]] == Unpacking the Executable JAR -If you are running your application from a container, you can use an executable jar, but it is also often an advantage to explode it and run it in a different way. -Certain PaaS implementations may also choose to unpack archives before they run. +If you are running your application, you can use an executable jar, but it is also often an advantage to extract it and run it in a different way. +Certain PaaS implementations may also choose to extract archives before they run. For example, Cloud Foundry operates this way. -One way to run an unpacked archive is by starting the appropriate launcher, as follows: -[source,shell] ----- -$ jar -xf myapp.jar -$ java org.springframework.boot.loader.launch.JarLauncher ----- +With the help of the jarmode, you can extract the jar to different layouts. +The most efficient layout is a CDS (class data sharing) friendly layout. +This layout is used by default. -This is actually slightly faster on startup (depending on the size of the jar) than running from an unexploded archive. -After startup, you should not expect any differences. - -Once you have unpacked the jar file, you can also get an extra boost to startup time by running the app with its "natural" main method instead of the `JarLauncher`. For example: +In this layout, the libraries are extracted to a `lib/` folder, and the application JAR +contains the application classes and a manifest which references the libraries in the `lib/` folder. [source,shell] ---- -$ jar -xf myapp.jar -$ java -cp "BOOT-INF/classes:BOOT-INF/lib/*" com.example.MyApplication +$ java -Djarmode=tools -jar my-app.jar extract +$ java -jar my-app/my-app.jar ---- -NOTE: Using the `JarLauncher` over the application's main method has the added benefit of a predictable classpath order. -The jar contains a `classpath.idx` file which is used by the `JarLauncher` when constructing the classpath. +This is actually faster on startup (depending on the size of the jar) than running from an unexploded archive. +After startup, you should not expect any differences. + +TIP: Run `java -Djarmode=tools -jar my-app.jar help extract` to see all possible options.