mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-08-29 03:06:45 +08:00
Include layertools in layered jars build with Gradle
Closes gh-19867
This commit is contained in:
parent
288f5ceaee
commit
01a0a54f78
@ -18,7 +18,9 @@ package org.springframework.boot.gradle.tasks.bundling;
|
|||||||
|
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -43,6 +45,7 @@ import org.gradle.api.tasks.bundling.Jar;
|
|||||||
import org.springframework.boot.loader.tools.Layer;
|
import org.springframework.boot.loader.tools.Layer;
|
||||||
import org.springframework.boot.loader.tools.Layers;
|
import org.springframework.boot.loader.tools.Layers;
|
||||||
import org.springframework.boot.loader.tools.Library;
|
import org.springframework.boot.loader.tools.Library;
|
||||||
|
import org.springframework.util.FileCopyUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A custom {@link Jar} task that produces a Spring Boot executable jar.
|
* A custom {@link Jar} task that produces a Spring Boot executable jar.
|
||||||
@ -177,6 +180,15 @@ public class BootJar extends Jar implements BootArchive {
|
|||||||
*/
|
*/
|
||||||
public void layered() {
|
public void layered() {
|
||||||
this.layers = Layers.IMPLICIT;
|
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) -> {
|
this.bootInf.eachFile((details) -> {
|
||||||
Layer layer = layerForFileDetails(details);
|
Layer layer = layerForFileDetails(details);
|
||||||
if (layer != null) {
|
if (layer != null) {
|
||||||
|
@ -123,6 +123,12 @@ class BootJarTests extends AbstractBootArchiveTests<BootJar> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenJarIsLayeredThenLayerToolsAreAddedToTheJar() throws IOException {
|
||||||
|
List<String> entryNames = getEntryNames(createLayeredJar());
|
||||||
|
assertThat(entryNames).contains("BOOT-INF/layers/dependencies/lib/spring-boot-jarmode-layertools.jar");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void classpathIndexPointsToBootInfLibs() throws IOException {
|
void classpathIndexPointsToBootInfLibs() throws IOException {
|
||||||
try (JarFile jarFile = new JarFile(createPopulatedJar())) {
|
try (JarFile jarFile = new JarFile(createPopulatedJar())) {
|
||||||
|
Loading…
Reference in New Issue
Block a user