From eb5f38132f3cdaa970e08b213de248518b192c23 Mon Sep 17 00:00:00 2001 From: Patrik Beno Date: Mon, 9 Mar 2015 16:19:05 +0100 Subject: [PATCH] plugins: support for overriding layout-provided launcher class --- .../boot/gradle/SpringBootPluginExtension.groovy | 5 +++++ .../boot/gradle/repackage/RepackageTask.java | 7 +++++++ .../springframework/boot/loader/tools/Repackager.java | 10 +++++++++- .../org/springframework/boot/maven/RepackageMojo.java | 7 +++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/SpringBootPluginExtension.groovy b/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/SpringBootPluginExtension.groovy index 86abbc3a745e..81e630741d60 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/SpringBootPluginExtension.groovy +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/SpringBootPluginExtension.groovy @@ -59,6 +59,11 @@ public class SpringBootPluginExtension { } } + /** + * Launcher class, replaces the default specified by layout. Optional. + */ + String launcherClass; + /** * The main class that should be run. Instead of setting this explicitly you can use the * 'mainClassName' of the project or the 'main' of the 'run' task. If not specified the diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/RepackageTask.java b/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/RepackageTask.java index 932017ba0d98..b099c4733019 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/RepackageTask.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/RepackageTask.java @@ -165,6 +165,7 @@ private void repackage(File file) { } Repackager repackager = new LoggingRepackager(file); setMainClass(repackager); + setLauncherClass(repackager); if (this.extension.convertLayout() != null) { repackager.setLayout(this.extension.convertLayout()); } @@ -201,6 +202,12 @@ else if (getProject().getTasks().getByName("run").hasProperty("main")) { getLogger().info("Setting mainClass: " + mainClass); repackager.setMainClass(mainClass); } + + private void setLauncherClass(Repackager repackager) { + String launcherClass = extension.getLauncherClass(); + getLogger().info("Setting mainClass: " + launcherClass); + repackager.setLauncherClass(launcherClass); + } } /** diff --git a/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java b/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java index 97da6ffc71b8..2b441e50236a 100644 --- a/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java +++ b/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java @@ -42,6 +42,8 @@ public class Repackager { private static final byte[] ZIP_FILE_HEADER = new byte[] { 'P', 'K', 3, 4 }; + private String launcherClass; + private String mainClass; private boolean backupSource = true; @@ -58,6 +60,10 @@ public Repackager(File source) { this.layout = Layouts.forFile(source); } + public void setLauncherClass(String launcherClass) { + this.launcherClass = launcherClass; + } + /** * Sets the main class that should be run. If not specified the value from the * MANIFEST will be used, or if no manifest entry is found the archive will be @@ -229,7 +235,9 @@ private Manifest buildManifest(JarFile source) throws IOException { if (startClass == null) { startClass = findMainMethod(source); } - String launcherClassName = this.layout.getLauncherClassName(); + String launcherClassName = (launcherClass != null) + ? launcherClass + : layout.getLauncherClassName(); if (launcherClassName != null) { manifest.getMainAttributes() .putValue(MAIN_CLASS_ATTRIBUTE, launcherClassName); diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RepackageMojo.java b/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RepackageMojo.java index fee5481c326a..56219dbc636f 100644 --- a/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RepackageMojo.java +++ b/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RepackageMojo.java @@ -100,6 +100,12 @@ public class RepackageMojo extends AbstractDependencyFilterMojo { @Parameter private String classifier; + /** + * Name of the launcher class; overrides the one specified by layout. + */ + @Parameter + private String launcherClass; + /** * The name of the main class. If not specified the first compiled class found that * contains a 'main' method will be used. @@ -156,6 +162,7 @@ protected String findMainMethod(JarFile source) throws IOException { } }; repackager.setMainClass(this.mainClass); + repackager.setLauncherClass(this.launcherClass); if (this.layout != null) { getLog().info("Layout: " + this.layout); repackager.setLayout(this.layout.layout());