Tooling for PropertiesLauncher in JAR archives
To use PropertiesLauncher instead of JarLauncher in an
executable JAR we have provided tooling support. In Maven
(using the starter parent to default some of the settings):
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
</configuration>
</plugin>
in Gradle:
apply plugin: "spring-boot"
springBoot {
layout = 'ZIP'
}
}
[Fixes #58837492] [bs-330] Add tooling for PropertiesLauncher
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.springframework.boot.maven.it</groupId>
|
||||
<artifactId>jar</artifactId>
|
||||
<version>0.0.1.BUILD-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>@project.groupId@</groupId>
|
||||
<artifactId>@project.artifactId@</artifactId>
|
||||
<version>@project.version@</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<layout>ZIP</layout>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestEntries>
|
||||
<Not-Used>Foo</Not-Used>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<version>3.2.3.RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -0,0 +1,8 @@
|
||||
package org.test;
|
||||
|
||||
public class SampleApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import java.io.*;
|
||||
import org.springframework.boot.maven.*;
|
||||
|
||||
Verify.verifyZip(
|
||||
new File( basedir, "target/jar-0.0.1.BUILD-SNAPSHOT.jar" )
|
||||
);
|
||||
|
||||
@@ -29,6 +29,8 @@ import org.apache.maven.plugins.annotations.Parameter;
|
||||
import org.apache.maven.plugins.annotations.ResolutionScope;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.project.MavenProjectHelper;
|
||||
import org.springframework.boot.loader.tools.Layout;
|
||||
import org.springframework.boot.loader.tools.Layouts;
|
||||
import org.springframework.boot.loader.tools.Libraries;
|
||||
import org.springframework.boot.loader.tools.Repackager;
|
||||
|
||||
@@ -81,12 +83,22 @@ public class RepackageMojo extends AbstractMojo {
|
||||
@Parameter
|
||||
private String mainClass;
|
||||
|
||||
/**
|
||||
* The layout to use (JAR, WAR, ZIP, DIR) in case it cannot be inferred.
|
||||
*/
|
||||
@Parameter
|
||||
private LayoutType layout;
|
||||
|
||||
@Override
|
||||
public void execute() throws MojoExecutionException, MojoFailureException {
|
||||
File source = this.project.getArtifact().getFile();
|
||||
File target = getTargetFile();
|
||||
Repackager repackager = new Repackager(source);
|
||||
repackager.setMainClass(this.mainClass);
|
||||
if (this.layout != null) {
|
||||
getLog().info("Layout: " + this.layout);
|
||||
repackager.setLayout(this.layout.layout());
|
||||
}
|
||||
Libraries libraries = new ArtifactsLibraries(this.project.getArtifacts());
|
||||
try {
|
||||
repackager.repackage(target, libraries);
|
||||
@@ -112,4 +124,18 @@ public class RepackageMojo extends AbstractMojo {
|
||||
+ this.project.getPackaging());
|
||||
}
|
||||
|
||||
public static enum LayoutType {
|
||||
JAR(new Layouts.Jar()), WAR(new Layouts.War()), ZIP(new Layouts.Expanded()), DIR(
|
||||
new Layouts.Expanded());
|
||||
private Layout layout;
|
||||
|
||||
public Layout layout() {
|
||||
return this.layout;
|
||||
}
|
||||
|
||||
private LayoutType(Layout layout) {
|
||||
this.layout = layout;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
#Generated by Git-Commit-Id-Plugin
|
||||
#Tue Oct 15 11:07:34 EDT 2013
|
||||
git.commit.id.abbrev=d3fa609
|
||||
#Wed Oct 16 08:42:05 EDT 2013
|
||||
git.commit.id.abbrev=a7ba9ba
|
||||
git.commit.user.email=dsyer@gopivotal.com
|
||||
git.commit.message.full=Extend PropertiesLauncher to load nested archives\n\nPropertiesLauncher can now be used to run an executable jar, and by\ndefault it will pick up nested archives in lib/ (where the Boot\ntools puts them). User can provide loader.path (colon-separated)\nto change the nested path.\n\n[\#58837492] [bs-330] Add tooling for PropertiesLauncher\n
|
||||
git.commit.id=d3fa60955b06fe78bbf0c914928d794661aca312
|
||||
git.commit.message.short=Extend PropertiesLauncher to load nested archives
|
||||
git.commit.message.full=Tooling for PropertiesLauncher\n
|
||||
git.commit.id=a7ba9ba5cd47a924f9c7668a772957fc05ffa058
|
||||
git.commit.message.short=Tooling for PropertiesLauncher
|
||||
git.commit.user.name=Dave Syer
|
||||
git.build.user.name=Dave Syer
|
||||
git.build.user.email=dsyer@gopivotal.com
|
||||
git.branch=master
|
||||
git.commit.time=2013-10-15T10\:51\:03-0400
|
||||
git.build.time=2013-10-15T11\:07\:34-0400
|
||||
git.branch=feature/proptool
|
||||
git.commit.time=2013-10-15T16\:54\:14-0400
|
||||
git.build.time=2013-10-16T08\:42\:05-0400
|
||||
|
||||
@@ -46,6 +46,10 @@ public class Verify {
|
||||
new WarArchiveVerification(file).verify();
|
||||
}
|
||||
|
||||
public static void verifyZip(File file) throws Exception {
|
||||
new ZipArchiveVerification(file).verify();
|
||||
}
|
||||
|
||||
private static abstract class AbstractArchiveVerification {
|
||||
|
||||
private File file;
|
||||
@@ -154,4 +158,20 @@ public class Verify {
|
||||
}
|
||||
}
|
||||
|
||||
private static class ZipArchiveVerification extends AbstractArchiveVerification {
|
||||
|
||||
public ZipArchiveVerification(File file) {
|
||||
super(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void verifyManifest(Manifest manifest) throws Exception {
|
||||
assertEquals("org.springframework.boot.loader.PropertiesLauncher", manifest
|
||||
.getMainAttributes().getValue("Main-Class"));
|
||||
assertEquals("org.test.SampleApplication", manifest.getMainAttributes()
|
||||
.getValue("Start-Class"));
|
||||
assertEquals("Foo", manifest.getMainAttributes().getValue("Not-Used"));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user