Commit a302238e authored by Scott Frederick's avatar Scott Frederick

Remove layout parameters from build-image Maven goal

This commit removes the `layout` and `layoutFactory` parameters
from the `build-image` goal in the Maven plugin while retaining
them for the `repackage` goal. The `build-image` goal currently
only supports jar archives, so allowing other layout types to be
configured for the goal could cause confusion.

Fixes gh-24105
parent 7cbd57b6
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -53,6 +53,7 @@ import org.springframework.boot.loader.tools.layer.CustomLayers; ...@@ -53,6 +53,7 @@ import org.springframework.boot.loader.tools.layer.CustomLayers;
* Abstract base class for classes that work with an {@link Packager}. * Abstract base class for classes that work with an {@link Packager}.
* *
* @author Phillip Webb * @author Phillip Webb
* @author Scott Frederick
* @since 2.3.0 * @since 2.3.0
*/ */
public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo { public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo {
...@@ -81,24 +82,6 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo ...@@ -81,24 +82,6 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo
@Parameter @Parameter
private String mainClass; private String mainClass;
/**
* The type of archive (which corresponds to how the dependencies are laid out inside
* it). Possible values are {@code JAR}, {@code WAR}, {@code ZIP}, {@code DIR},
* {@code NONE}. Defaults to a guess based on the archive type.
* @since 1.0.0
*/
@Parameter(property = "spring-boot.repackage.layout")
private LayoutType layout;
/**
* The layout factory that will be used to create the executable archive if no
* explicit layout is set. Alternative layouts implementations can be provided by 3rd
* parties.
* @since 1.5.0
*/
@Parameter
private LayoutFactory layoutFactory;
/** /**
* Exclude Spring Boot devtools from the repackaged archive. * Exclude Spring Boot devtools from the repackaged archive.
* @since 1.3.0 * @since 1.3.0
...@@ -121,6 +104,24 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo ...@@ -121,6 +104,24 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo
@Parameter @Parameter
private Layers layers; private Layers layers;
/**
* Return the type of archive that should be packaged by this MOJO.
* @return {@code null}, indicating a layout type will be chosen based on the original
* archive type
*/
protected LayoutType getLayout() {
return null;
}
/**
* Return the layout factory that will be used to determine the {@link LayoutType} if
* no explicit layout is set.
* @return {@code null}, indicating a default layout factory will be chosen
*/
protected LayoutFactory getLayoutFactory() {
return null;
}
/** /**
* Return a {@link Packager} configured for this MOJO. * Return a {@link Packager} configured for this MOJO.
* @param <P> the packager type * @param <P> the packager type
...@@ -129,12 +130,13 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo ...@@ -129,12 +130,13 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo
*/ */
protected <P extends Packager> P getConfiguredPackager(Supplier<P> supplier) { protected <P extends Packager> P getConfiguredPackager(Supplier<P> supplier) {
P packager = supplier.get(); P packager = supplier.get();
packager.setLayoutFactory(this.layoutFactory); packager.setLayoutFactory(getLayoutFactory());
packager.addMainClassTimeoutWarningListener(new LoggingMainClassTimeoutWarningListener(this::getLog)); packager.addMainClassTimeoutWarningListener(new LoggingMainClassTimeoutWarningListener(this::getLog));
packager.setMainClass(this.mainClass); packager.setMainClass(this.mainClass);
if (this.layout != null) { LayoutType layout = getLayout();
getLog().info("Layout: " + this.layout); if (layout != null) {
packager.setLayout(this.layout.layout()); getLog().info("Layout: " + layout);
packager.setLayout(layout.layout());
} }
if (this.layers != null && this.layers.isEnabled()) { if (this.layers != null && this.layers.isEnabled()) {
packager.setLayers((this.layers.getConfiguration() != null) packager.setLayers((this.layers.getConfiguration() != null)
......
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -36,6 +36,7 @@ import org.apache.maven.plugins.annotations.ResolutionScope; ...@@ -36,6 +36,7 @@ import org.apache.maven.plugins.annotations.ResolutionScope;
import org.springframework.boot.loader.tools.DefaultLaunchScript; import org.springframework.boot.loader.tools.DefaultLaunchScript;
import org.springframework.boot.loader.tools.LaunchScript; import org.springframework.boot.loader.tools.LaunchScript;
import org.springframework.boot.loader.tools.LayoutFactory;
import org.springframework.boot.loader.tools.Libraries; import org.springframework.boot.loader.tools.Libraries;
import org.springframework.boot.loader.tools.Repackager; import org.springframework.boot.loader.tools.Repackager;
...@@ -48,6 +49,7 @@ import org.springframework.boot.loader.tools.Repackager; ...@@ -48,6 +49,7 @@ import org.springframework.boot.loader.tools.Repackager;
* @author Dave Syer * @author Dave Syer
* @author Stephane Nicoll * @author Stephane Nicoll
* @author Björn Lindström * @author Björn Lindström
* @author Scott Frederick
* @since 1.0.0 * @since 1.0.0
*/ */
@Mojo(name = "repackage", defaultPhase = LifecyclePhase.PACKAGE, requiresProject = true, threadSafe = true, @Mojo(name = "repackage", defaultPhase = LifecyclePhase.PACKAGE, requiresProject = true, threadSafe = true,
...@@ -152,6 +154,45 @@ public class RepackageMojo extends AbstractPackagerMojo { ...@@ -152,6 +154,45 @@ public class RepackageMojo extends AbstractPackagerMojo {
@Parameter(defaultValue = "${project.build.outputTimestamp}") @Parameter(defaultValue = "${project.build.outputTimestamp}")
private String outputTimestamp; private String outputTimestamp;
/**
* The type of archive (which corresponds to how the dependencies are laid out inside
* it). Possible values are {@code JAR}, {@code WAR}, {@code ZIP}, {@code DIR},
* {@code NONE}. Defaults to a guess based on the archive type.
* @since 1.0.0
*/
@Parameter(property = "spring-boot.repackage.layout")
private LayoutType layout;
/**
* The layout factory that will be used to create the executable archive if no
* explicit layout is set. Alternative layouts implementations can be provided by 3rd
* parties.
* @since 1.5.0
*/
@Parameter
private LayoutFactory layoutFactory;
/**
* Return the type of archive that should be packaged by this MOJO.
* @return the value of the {@code layout} parameter, or {@code null} if the parameter
* is not provided
*/
@Override
protected LayoutType getLayout() {
return this.layout;
}
/**
* Return the layout factory that will be used to determine the {@link LayoutType} if
* no explicit layout is set.
* @return the value of the {@code layoutFactory} parameter, or {@code null} if the
* parameter is not provided
*/
@Override
protected LayoutFactory getLayoutFactory() {
return this.layoutFactory;
}
@Override @Override
public void execute() throws MojoExecutionException, MojoFailureException { public void execute() throws MojoExecutionException, MojoFailureException {
if (this.project.getPackaging().equals("pom")) { if (this.project.getPackaging().equals("pom")) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment