@ -18,7 +18,9 @@ package org.springframework.boot.gradle.tasks.bundling;
@@ -18,7 +18,9 @@ package org.springframework.boot.gradle.tasks.bundling;
import java.io.BufferedWriter ;
import java.io.File ;
import java.io.FileOutputStream ;
import java.io.IOException ;
import java.io.InputStream ;
import java.io.StringWriter ;
import java.util.ArrayList ;
import java.util.Collections ;
@ -43,6 +45,7 @@ import org.gradle.api.tasks.bundling.Jar;
@@ -43,6 +45,7 @@ import org.gradle.api.tasks.bundling.Jar;
import org.springframework.boot.loader.tools.Layer ;
import org.springframework.boot.loader.tools.Layers ;
import org.springframework.boot.loader.tools.Library ;
import org.springframework.util.FileCopyUtils ;
/ * *
* A custom { @link Jar } task that produces a Spring Boot executable jar .
@ -177,6 +180,15 @@ public class BootJar extends Jar implements BootArchive {
@@ -177,6 +180,15 @@ public class BootJar extends Jar implements BootArchive {
* /
public void layered ( ) {
this . layers = Layers . IMPLICIT ;
this . bootInf . into ( "lib" , ( spec ) - > spec . from ( ( Callable < File > ) ( ) - > {
String jarName = "spring-boot-jarmode-layertools.jar" ;
InputStream stream = getClass ( ) . getClassLoader ( ) . getResourceAsStream ( "META-INF/jarmode/" + jarName ) ;
File taskTmp = new File ( getProject ( ) . getBuildDir ( ) , "tmp/" + getName ( ) ) ;
taskTmp . mkdirs ( ) ;
File layerToolsJar = new File ( taskTmp , jarName ) ;
FileCopyUtils . copy ( stream , new FileOutputStream ( layerToolsJar ) ) ;
return layerToolsJar ;
} ) ) ;
this . bootInf . eachFile ( ( details ) - > {
Layer layer = layerForFileDetails ( details ) ;
if ( layer ! = null ) {