Implement extract and list-layers command
Adds a new jarmode called 'tools'. This provides two commands, 'extract' and 'list-layers'. list-layers is the same as list from the layertools. extract is able to extract the JAR in four different modes: - CDS compatible extraction with libraries in a lib folder and a runner .jar - CDS compatible as above, but with layers - Launcher based - Launcher based with layers. This is essentially the same as extract from the layertools The commands in layertools have been deprecated in favor of the commands in 'tools'. This also changes the behavior of layers.enabled from the Gradle and Maven plugin: before this commit, layers.enabled prevents the inclusion of the layer index file as well as the layertools JAR. After this commit, layers.enabled only prevents the inclusion of the layer index file. layer.includeLayerTools have been deprecated in favor of includeTools, and the layertools JAR has been renamed to tools. Closes gh-38276
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2021 the original author or authors.
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -35,7 +35,7 @@ public class JarModeLibrary extends Library {
|
||||
/**
|
||||
* {@link JarModeLibrary} for layer tools.
|
||||
*/
|
||||
public static final JarModeLibrary LAYER_TOOLS = new JarModeLibrary("spring-boot-jarmode-layertools");
|
||||
public static final JarModeLibrary TOOLS = new JarModeLibrary("spring-boot-jarmode-tools");
|
||||
|
||||
JarModeLibrary(String artifactId) {
|
||||
this(createCoordinates(artifactId));
|
||||
|
||||
@@ -511,8 +511,8 @@ public abstract class Packager {
|
||||
addLibrary(library);
|
||||
}
|
||||
});
|
||||
if (isLayered() && Packager.this.includeRelevantJarModeJars) {
|
||||
addLibrary(JarModeLibrary.LAYER_TOOLS);
|
||||
if (Packager.this.includeRelevantJarModeJars) {
|
||||
addLibrary(JarModeLibrary.TOOLS);
|
||||
}
|
||||
this.unpackHandler = new PackagedLibrariesUnpackHandler();
|
||||
this.libraryLookup = this::lookup;
|
||||
|
||||
@@ -226,6 +226,7 @@ abstract class AbstractPackagerTests<P extends Packager> {
|
||||
this.testJarFile.addClass("a/b/C.class", ClassWithMainMethod.class);
|
||||
File file = this.testJarFile.getFile();
|
||||
P packager = createPackager(file);
|
||||
packager.setIncludeRelevantJarModeJars(false);
|
||||
execute(packager, (callback) -> {
|
||||
callback.library(newLibrary(libJarFile1, LibraryScope.COMPILE, false));
|
||||
callback.library(newLibrary(libJarFile2, LibraryScope.COMPILE, false));
|
||||
@@ -299,7 +300,7 @@ abstract class AbstractPackagerTests<P extends Packager> {
|
||||
assertThat(hasPackagedEntry("BOOT-INF/classpath.idx")).isTrue();
|
||||
String classpathIndex = getPackagedEntryContent("BOOT-INF/classpath.idx");
|
||||
assertThat(Arrays.asList(classpathIndex.split("\\n")))
|
||||
.containsExactly("- \"BOOT-INF/lib/spring-boot-jarmode-layertools.jar\"");
|
||||
.containsExactly("- \"BOOT-INF/lib/spring-boot-jarmode-tools.jar\"");
|
||||
assertThat(hasPackagedEntry("BOOT-INF/layers.idx")).isTrue();
|
||||
String layersIndex = getPackagedEntryContent("BOOT-INF/layers.idx");
|
||||
List<String> expectedLayers = new ArrayList<>();
|
||||
@@ -606,6 +607,7 @@ abstract class AbstractPackagerTests<P extends Packager> {
|
||||
this.testJarFile.addClass("WEB-INF/classes/com/example/Application.class", ClassWithMainMethod.class);
|
||||
this.testJarFile.addFile("WEB-INF/lib/" + webLibrary.getName(), webLibrary);
|
||||
P packager = createPackager(this.testJarFile.getFile("war"));
|
||||
packager.setIncludeRelevantJarModeJars(false);
|
||||
packager.setLayout(new Layouts.War());
|
||||
execute(packager, (callback) -> {
|
||||
callback.library(newLibrary(webLibrary, LibraryScope.COMPILE, false, false));
|
||||
|
||||
Reference in New Issue
Block a user