I think this is safe, judging by the integration tests, but I'm not putting it in 1.2.x until we've had some feedback on it. The integration tests actually had a bug that was masking this problem because they were merging Properties from the whole classpath instead of picking the first available resource (which is generally what we do in Spring Boot applications for application.properties for instance). Fixes gh-3048
31 lines
1.4 KiB
Groovy
31 lines
1.4 KiB
Groovy
def jarfile = './target/executable-props-0.0.1.BUILD-SNAPSHOT-full.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 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
|
|
|
|
new File("${basedir}/application.properties").withWriter { it -> it << "message: Foo" }
|
|
out = exec("java -jar ${jarfile}")
|
|
assert out.contains('Hello Embedded World!'),
|
|
'Should use the application.properties from the jar in preference to local filesystem\n' + out
|
|
|
|
out = exec("java -Dloader.path=.,lib -jar ${jarfile}")
|
|
assert out.contains('Hello Embedded Foo!'),
|
|
'With loader.path=.,lib should use the application.properties from the local filesystem\n' + out
|
|
|
|
new File("${basedir}/target/application.properties").withWriter { it -> it << "message: Spam" }
|
|
out = exec("java -Dloader.path=target,.,lib -jar ${jarfile}")
|
|
assert out.contains('Hello Embedded Spam!'),
|
|
'With loader.path=target,.,lib should use the application.properties from the target directory\n' + out |