mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-09-03 04:26:12 +08:00
Add Spring-Boot-* manifest attributes to jars and wars built with Gradle
Closes gh-16068
This commit is contained in:
parent
336af93c7e
commit
7b5f46d6e3
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
* Copyright 2012-2019 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.
|
||||
@ -73,10 +73,20 @@ class BootArchiveSupport {
|
||||
configureExclusions();
|
||||
}
|
||||
|
||||
void configureManifest(Jar jar, String mainClassName) {
|
||||
void configureManifest(Jar jar, String mainClassName, String springBootClasses,
|
||||
String springBootLib) {
|
||||
Attributes attributes = jar.getManifest().getAttributes();
|
||||
attributes.putIfAbsent("Main-Class", this.loaderMainClass);
|
||||
attributes.putIfAbsent("Start-Class", mainClassName);
|
||||
attributes.computeIfAbsent("Spring-Boot-Version",
|
||||
(key) -> determineSpringBootVersion());
|
||||
attributes.putIfAbsent("Spring-Boot-Classes", springBootClasses);
|
||||
attributes.putIfAbsent("Spring-Boot-Lib", springBootLib);
|
||||
}
|
||||
|
||||
private String determineSpringBootVersion() {
|
||||
String implementationVersion = getClass().getPackage().getImplementationVersion();
|
||||
return (implementationVersion != null) ? implementationVersion : "unknown";
|
||||
}
|
||||
|
||||
CopyAction createCopyAction(Jar jar) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
* Copyright 2012-2019 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.
|
||||
@ -65,7 +65,8 @@ public class BootJar extends Jar implements BootArchive {
|
||||
|
||||
@Override
|
||||
public void copy() {
|
||||
this.support.configureManifest(this, getMainClassName());
|
||||
this.support.configureManifest(this, getMainClassName(), "BOOT-INF/classes/",
|
||||
"BOOT-INF/lib/");
|
||||
super.copy();
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
* Copyright 2012-2019 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.
|
||||
@ -57,7 +57,8 @@ public class BootWar extends War implements BootArchive {
|
||||
|
||||
@Override
|
||||
public void copy() {
|
||||
this.support.configureManifest(this, getMainClassName());
|
||||
this.support.configureManifest(this, getMainClassName(), "WEB-INF/classes/",
|
||||
"WEB-INF/lib/");
|
||||
super.copy();
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
* Copyright 2012-2019 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.
|
||||
@ -97,6 +97,13 @@ public abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
|
||||
.isEqualTo(this.launcherClass);
|
||||
assertThat(jarFile.getManifest().getMainAttributes().getValue("Start-Class"))
|
||||
.isEqualTo("com.example.Main");
|
||||
assertThat(jarFile.getManifest().getMainAttributes()
|
||||
.getValue("Spring-Boot-Classes")).isEqualTo(this.classesPath);
|
||||
assertThat(
|
||||
jarFile.getManifest().getMainAttributes().getValue("Spring-Boot-Lib"))
|
||||
.isEqualTo(this.libPath);
|
||||
assertThat(jarFile.getManifest().getMainAttributes()
|
||||
.getValue("Spring-Boot-Version")).isNotNull();
|
||||
}
|
||||
}
|
||||
|
||||
@ -106,8 +113,8 @@ public abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
|
||||
this.task.classpath(this.temp.newFile("one.jar"), this.temp.newFile("two.jar"));
|
||||
this.task.execute();
|
||||
try (JarFile jarFile = new JarFile(this.task.getArchivePath())) {
|
||||
assertThat(jarFile.getEntry(this.libPath + "/one.jar")).isNotNull();
|
||||
assertThat(jarFile.getEntry(this.libPath + "/two.jar")).isNotNull();
|
||||
assertThat(jarFile.getEntry(this.libPath + "one.jar")).isNotNull();
|
||||
assertThat(jarFile.getEntry(this.libPath + "two.jar")).isNotNull();
|
||||
}
|
||||
}
|
||||
|
||||
@ -123,7 +130,7 @@ public abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
|
||||
this.task.execute();
|
||||
try (JarFile jarFile = new JarFile(this.task.getArchivePath())) {
|
||||
assertThat(
|
||||
jarFile.getEntry(this.classesPath + "/com/example/Application.class"))
|
||||
jarFile.getEntry(this.classesPath + "com/example/Application.class"))
|
||||
.isNotNull();
|
||||
}
|
||||
}
|
||||
@ -136,8 +143,8 @@ public abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
|
||||
.setClasspath(this.task.getProject().files(this.temp.newFile("two.jar")));
|
||||
this.task.execute();
|
||||
try (JarFile jarFile = new JarFile(this.task.getArchivePath())) {
|
||||
assertThat(jarFile.getEntry(this.libPath + "/one.jar")).isNull();
|
||||
assertThat(jarFile.getEntry(this.libPath + "/two.jar")).isNotNull();
|
||||
assertThat(jarFile.getEntry(this.libPath + "one.jar")).isNull();
|
||||
assertThat(jarFile.getEntry(this.libPath + "two.jar")).isNotNull();
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,8 +155,8 @@ public abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
|
||||
this.task.setClasspath(this.temp.newFile("two.jar"));
|
||||
this.task.execute();
|
||||
try (JarFile jarFile = new JarFile(this.task.getArchivePath())) {
|
||||
assertThat(jarFile.getEntry(this.libPath + "/one.jar")).isNull();
|
||||
assertThat(jarFile.getEntry(this.libPath + "/two.jar")).isNotNull();
|
||||
assertThat(jarFile.getEntry(this.libPath + "one.jar")).isNull();
|
||||
assertThat(jarFile.getEntry(this.libPath + "two.jar")).isNotNull();
|
||||
}
|
||||
}
|
||||
|
||||
@ -187,9 +194,9 @@ public abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
|
||||
this.task.requiresUnpack("**/one.jar");
|
||||
this.task.execute();
|
||||
try (JarFile jarFile = new JarFile(this.task.getArchivePath())) {
|
||||
assertThat(jarFile.getEntry(this.libPath + "/one.jar").getComment())
|
||||
assertThat(jarFile.getEntry(this.libPath + "one.jar").getComment())
|
||||
.startsWith("UNPACK:");
|
||||
assertThat(jarFile.getEntry(this.libPath + "/two.jar").getComment()).isNull();
|
||||
assertThat(jarFile.getEntry(this.libPath + "two.jar").getComment()).isNull();
|
||||
}
|
||||
}
|
||||
|
||||
@ -200,9 +207,9 @@ public abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
|
||||
this.task.requiresUnpack((element) -> element.getName().endsWith("two.jar"));
|
||||
this.task.execute();
|
||||
try (JarFile jarFile = new JarFile(this.task.getArchivePath())) {
|
||||
assertThat(jarFile.getEntry(this.libPath + "/two.jar").getComment())
|
||||
assertThat(jarFile.getEntry(this.libPath + "two.jar").getComment())
|
||||
.startsWith("UNPACK:");
|
||||
assertThat(jarFile.getEntry(this.libPath + "/one.jar").getComment()).isNull();
|
||||
assertThat(jarFile.getEntry(this.libPath + "one.jar").getComment()).isNull();
|
||||
}
|
||||
}
|
||||
|
||||
@ -322,7 +329,7 @@ public abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
|
||||
this.task.execute();
|
||||
assertThat(this.task.getArchivePath()).exists();
|
||||
try (JarFile jarFile = new JarFile(this.task.getArchivePath())) {
|
||||
assertThat(jarFile.getEntry(this.libPath + "/spring-boot-devtools-0.1.2.jar"))
|
||||
assertThat(jarFile.getEntry(this.libPath + "spring-boot-devtools-0.1.2.jar"))
|
||||
.isNull();
|
||||
}
|
||||
}
|
||||
@ -335,7 +342,7 @@ public abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
|
||||
this.task.execute();
|
||||
assertThat(this.task.getArchivePath()).exists();
|
||||
try (JarFile jarFile = new JarFile(this.task.getArchivePath())) {
|
||||
assertThat(jarFile.getEntry(this.libPath + "/spring-boot-devtools-0.1.2.jar"))
|
||||
assertThat(jarFile.getEntry(this.libPath + "spring-boot-devtools-0.1.2.jar"))
|
||||
.isNotNull();
|
||||
}
|
||||
}
|
||||
@ -377,9 +384,9 @@ public abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
|
||||
this.task.execute();
|
||||
assertThat(getEntryNames(this.task.getArchivePath())).containsSubsequence(
|
||||
"org/springframework/boot/loader/",
|
||||
this.classesPath + "/com/example/Application.class",
|
||||
this.libPath + "/first-library.jar", this.libPath + "/second-library.jar",
|
||||
this.libPath + "/third-library.jar");
|
||||
this.classesPath + "com/example/Application.class",
|
||||
this.libPath + "first-library.jar", this.libPath + "second-library.jar",
|
||||
this.libPath + "third-library.jar");
|
||||
}
|
||||
|
||||
private T configure(T task) throws IOException {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
* Copyright 2012-2019 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.
|
||||
@ -33,7 +33,7 @@ public class BootJarTests extends AbstractBootArchiveTests<BootJar> {
|
||||
|
||||
public BootJarTests() {
|
||||
super(BootJar.class, "org.springframework.boot.loader.JarLauncher",
|
||||
"BOOT-INF/lib", "BOOT-INF/classes");
|
||||
"BOOT-INF/lib/", "BOOT-INF/classes/");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
* Copyright 2012-2019 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.
|
||||
@ -32,8 +32,8 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
public class BootWarTests extends AbstractBootArchiveTests<BootWar> {
|
||||
|
||||
public BootWarTests() {
|
||||
super(BootWar.class, "org.springframework.boot.loader.WarLauncher", "WEB-INF/lib",
|
||||
"WEB-INF/classes");
|
||||
super(BootWar.class, "org.springframework.boot.loader.WarLauncher",
|
||||
"WEB-INF/lib/", "WEB-INF/classes/");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
Loading…
Reference in New Issue
Block a user