Browse Source
* gh-8334: Polish "Allow loader.path to refer to nested jars" Allow loader.path to refer to nested jarspull/8516/head
10 changed files with 274 additions and 57 deletions
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
loader.path=jar:file:target/executable-props-lib-0.0.1.BUILD-SNAPSHOT-dependencies.jar/!BOOT-INF/lib |
||||
@ -0,0 +1,104 @@
@@ -0,0 +1,104 @@
|
||||
<?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.launcher.it</groupId> |
||||
<artifactId>executable-props-lib</artifactId> |
||||
<version>0.0.1.BUILD-SNAPSHOT</version> |
||||
<properties> |
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
||||
</properties> |
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-compiler-plugin</artifactId> |
||||
<version>3.1</version> |
||||
<configuration> |
||||
<source>1.6</source> |
||||
<target>1.6</target> |
||||
</configuration> |
||||
</plugin> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-dependency-plugin</artifactId> |
||||
<version>2.10</version> |
||||
<executions> |
||||
<execution> |
||||
<id>unpack</id> |
||||
<phase>prepare-package</phase> |
||||
<goals> |
||||
<goal>unpack</goal> |
||||
</goals> |
||||
<configuration> |
||||
<artifactItems> |
||||
<artifactItem> |
||||
<groupId>@project.groupId@</groupId> |
||||
<artifactId>@project.artifactId@</artifactId> |
||||
<version>@project.version@</version> |
||||
<type>jar</type> |
||||
</artifactItem> |
||||
</artifactItems> |
||||
<outputDirectory>${project.build.directory}/app-assembly</outputDirectory> |
||||
</configuration> |
||||
</execution> |
||||
<execution> |
||||
<id>copy</id> |
||||
<phase>prepare-package</phase> |
||||
<goals> |
||||
<goal>copy-dependencies</goal> |
||||
</goals> |
||||
<configuration> |
||||
<outputDirectory>${project.build.directory}/dependencies-assembly/BOOT-INF/lib</outputDirectory> |
||||
</configuration> |
||||
</execution> |
||||
</executions> |
||||
</plugin> |
||||
<plugin> |
||||
<artifactId>maven-assembly-plugin</artifactId> |
||||
<version>2.4</version> |
||||
<executions> |
||||
<execution> |
||||
<id>app</id> |
||||
<phase>package</phase> |
||||
<goals> |
||||
<goal>single</goal> |
||||
</goals> |
||||
<configuration> |
||||
<descriptors> |
||||
<descriptor>src/main/assembly/app.xml</descriptor> |
||||
</descriptors> |
||||
<archive> |
||||
<manifest> |
||||
<mainClass>org.springframework.boot.loader.PropertiesLauncher</mainClass> |
||||
</manifest> |
||||
<manifestEntries> |
||||
<Start-Class>org.springframework.boot.launcher.it.props.EmbeddedJarStarter</Start-Class> |
||||
</manifestEntries> |
||||
</archive> |
||||
</configuration> |
||||
</execution> |
||||
<execution> |
||||
<id>depedendencies</id> |
||||
<phase>package</phase> |
||||
<goals> |
||||
<goal>single</goal> |
||||
</goals> |
||||
<configuration> |
||||
<descriptors> |
||||
<descriptor>src/main/assembly/dependencies.xml</descriptor> |
||||
</descriptors> |
||||
</configuration> |
||||
</execution> |
||||
</executions> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.springframework</groupId> |
||||
<artifactId>spring-context</artifactId> |
||||
<version>4.1.4.RELEASE</version> |
||||
</dependency> |
||||
</dependencies> |
||||
</project> |
||||
@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<assembly |
||||
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> |
||||
<id>app</id> |
||||
<formats> |
||||
<format>jar</format> |
||||
</formats> |
||||
<includeBaseDirectory>false</includeBaseDirectory> |
||||
<dependencySets> |
||||
<dependencySet> |
||||
<useProjectArtifact/> |
||||
<includes> |
||||
<include>${project.groupId}:${project.artifactId}</include> |
||||
</includes> |
||||
<outputDirectory>BOOT-INF/classes</outputDirectory> |
||||
<unpack>true</unpack> |
||||
</dependencySet> |
||||
</dependencySets> |
||||
<fileSets> |
||||
<fileSet> |
||||
<directory>${project.build.directory}/app-assembly</directory> |
||||
<outputDirectory>/</outputDirectory> |
||||
</fileSet> |
||||
</fileSets> |
||||
</assembly> |
||||
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<assembly |
||||
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> |
||||
<id>dependencies</id> |
||||
<formats> |
||||
<format>jar</format> |
||||
</formats> |
||||
<includeBaseDirectory>false</includeBaseDirectory> |
||||
<fileSets> |
||||
<fileSet> |
||||
<directory>${project.build.directory}/dependencies-assembly</directory> |
||||
<outputDirectory>/</outputDirectory> |
||||
</fileSet> |
||||
</fileSets> |
||||
</assembly> |
||||
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
/* |
||||
* Copyright 2012-2017 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.launcher.it.props; |
||||
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext; |
||||
|
||||
/** |
||||
* Main class to start the embedded server. |
||||
* |
||||
* @author Dave Syer |
||||
*/ |
||||
public final class EmbeddedJarStarter { |
||||
|
||||
public static void main(String[] args) throws Exception { |
||||
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class); |
||||
context.getBean(SpringConfiguration.class).run(args); |
||||
context.close(); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,54 @@
@@ -0,0 +1,54 @@
|
||||
/* |
||||
* Copyright 2012-2017 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.launcher.it.props; |
||||
|
||||
import java.io.IOException; |
||||
import java.util.Properties; |
||||
|
||||
import javax.annotation.PostConstruct; |
||||
|
||||
import org.springframework.context.annotation.ComponentScan; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.core.io.ClassPathResource; |
||||
|
||||
/** |
||||
* Spring configuration. |
||||
* |
||||
* @author Dave Syer |
||||
*/ |
||||
@Configuration |
||||
@ComponentScan |
||||
public class SpringConfiguration { |
||||
|
||||
private String message = "Jar"; |
||||
|
||||
@PostConstruct |
||||
public void init() throws IOException { |
||||
Properties props = new Properties(); |
||||
props.load(new ClassPathResource("application.properties").getInputStream()); |
||||
String value = props.getProperty("message"); |
||||
if (value!=null) { |
||||
this.message = value; |
||||
} |
||||
|
||||
} |
||||
|
||||
public void run(String... args) { |
||||
System.err.println("Hello Embedded " + this.message + "!"); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
message: World |
||||
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
def jarfile = './target/executable-props-lib-0.0.1.BUILD-SNAPSHOT-app.jar' |
||||
|
||||
new File("${basedir}/application.properties").delete() |
||||
|
||||
String exec(String command) { |
||||
def proc = command.execute([], basedir) |
||||
proc.waitFor() |
||||
proc.err.text |
||||
} |
||||
|
||||
String out = exec("java -jar ${jarfile}") |
||||
assert out.contains('Hello Embedded World!'), |
||||
'Using -jar my.jar should load dependencies from separate jar and use the application.properties from the jar\n' + out |
||||
|
||||
out = exec("java -cp ${jarfile} org.springframework.boot.loader.PropertiesLauncher") |
||||
assert out.contains('Hello Embedded World!'), |
||||
'Using -cp my.jar with PropertiesLauncher should load dependencies from separate jar and use the application.properties from the jar\n' + out |
||||
Loading…
Reference in new issue