diff --git a/spring-boot-docs/src/main/asciidoc/appendix-executable-jar-format.adoc b/spring-boot-docs/src/main/asciidoc/appendix-executable-jar-format.adoc
index 7a57cd6471..1a0732358d 100644
--- a/spring-boot-docs/src/main/asciidoc/appendix-executable-jar-format.adoc
+++ b/spring-boot-docs/src/main/asciidoc/appendix-executable-jar-format.adoc
@@ -147,7 +147,8 @@ files in directories (as opposed to explicitly on the classpath). In the case of
you just add extra jars in those locations if you want more. The `PropertiesLauncher`
looks in `BOOT-INF/lib/` in your application archive by default, but you can add
additional locations by setting an environment variable `LOADER_PATH` or `loader.path`
-in `loader.properties` (comma-separated list of directories or archives).
+in `loader.properties` (comma-separated list of directories, archives, or directories
+within archives).
@@ -280,7 +281,8 @@ the `Main-Class` attribute and leave out `Start-Class`.
* `loader.home` is only the directory location of an additional properties file
(overriding the default) as long as `loader.config.location` is not specified.
* `loader.path` can contain directories (scanned recursively for jar and zip files),
- archive paths, or wildcard patterns (for the default JVM behavior).
+ archive paths, a directory within an archive that is scanned for jar files (for
+ example, `dependencies.jar!/lib`), or wildcard patterns (for the default JVM behavior).
* `loader.path` (if empty) defaults to `BOOT-INF/lib` (meaning a local directory or a
nested one if running from an archive). Because of this `PropertiesLauncher` behaves the
same as `JarLauncher` when no additional configuration is provided.
diff --git a/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/loader.properties b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/loader.properties
index 1099d67456..48a576ba04 100644
--- a/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/loader.properties
+++ b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/loader.properties
@@ -1 +1 @@
-loader.path=jar:file:../executable-props/target/executable-props-0.0.1.BUILD-SNAPSHOT-full.jar/!BOOT-INF/lib
\ No newline at end of file
+loader.path=jar:file:target/executable-props-lib-0.0.1.BUILD-SNAPSHOT-dependencies.jar/!BOOT-INF/lib
\ No newline at end of file
diff --git a/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/pom.xml b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/pom.xml
index 972dfb4649..50b0f033e9 100644
--- a/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/pom.xml
+++ b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/pom.xml
@@ -39,7 +39,17 @@
jar
- ${project.build.directory}/assembly
+ ${project.build.directory}/app-assembly
+
+
+
+ copy
+ prepare-package
+
+ copy-dependencies
+
+
+ ${project.build.directory}/dependencies-assembly/BOOT-INF/lib
@@ -47,26 +57,38 @@
maven-assembly-plugin
2.4
-
-
- src/main/assembly/jar-with-dependencies.xml
-
-
-
- org.springframework.boot.loader.PropertiesLauncher
-
-
- org.springframework.boot.load.it.props.EmbeddedJarStarter
-
-
-
- jar-with-dependencies
+ app
package
single
+
+
+ src/main/assembly/app.xml
+
+
+
+ org.springframework.boot.loader.PropertiesLauncher
+
+
+ org.springframework.boot.launcher.it.props.EmbeddedJarStarter
+
+
+
+
+
+ depedendencies
+ package
+
+ single
+
+
+
+ src/main/assembly/dependencies.xml
+
+
diff --git a/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/jar-with-dependencies.xml b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/app.xml
similarity index 90%
rename from spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/jar-with-dependencies.xml
rename to spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/app.xml
index 1120acb7e2..d332aebc34 100644
--- a/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/jar-with-dependencies.xml
+++ b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/app.xml
@@ -3,7 +3,7 @@
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">
- full
+ app
jar
@@ -20,7 +20,7 @@
- ${project.build.directory}/assembly
+ ${project.build.directory}/app-assembly
/
diff --git a/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/dependencies.xml b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/dependencies.xml
new file mode 100644
index 0000000000..5044392b3e
--- /dev/null
+++ b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/assembly/dependencies.xml
@@ -0,0 +1,17 @@
+
+
+ dependencies
+
+ jar
+
+ false
+
+
+ ${project.build.directory}/dependencies-assembly
+ /
+
+
+
diff --git a/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/EmbeddedJarStarter.java b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/EmbeddedJarStarter.java
new file mode 100644
index 0000000000..da2c1bf2a9
--- /dev/null
+++ b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/EmbeddedJarStarter.java
@@ -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();
+ }
+
+}
diff --git a/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/SpringConfiguration.java b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/SpringConfiguration.java
new file mode 100644
index 0000000000..f05bae73fd
--- /dev/null
+++ b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/src/main/java/org/springframework/boot/launcher/it/props/SpringConfiguration.java
@@ -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 + "!");
+ }
+
+}
diff --git a/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/verify.groovy b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/verify.groovy
index ccb2e78f68..b855fbe7c7 100644
--- a/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/verify.groovy
+++ b/spring-boot-tools/spring-boot-loader/src/it/executable-props-lib/verify.groovy
@@ -1,4 +1,4 @@
-def jarfile = './target/executable-props-lib-0.0.1.BUILD-SNAPSHOT-full.jar'
+def jarfile = './target/executable-props-lib-0.0.1.BUILD-SNAPSHOT-app.jar'
new File("${basedir}/application.properties").delete()
@@ -10,8 +10,8 @@ String exec(String command) {
String out = exec("java -jar ${jarfile}")
assert out.contains('Hello Embedded World!'),
- 'Using -jar my.jar should use the application.properties from the jar\n' + out
+ '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 use the application.properties from the jar\n' + out
+ 'Using -cp my.jar with PropertiesLauncher should load dependencies from separate jar and use the application.properties from the jar\n' + out