@ -142,48 +142,64 @@ public class PropertiesLauncher extends Launcher {
@@ -142,48 +142,64 @@ public class PropertiesLauncher extends Launcher {
}
protected File getHomeDirectory ( ) {
return new File ( SystemPropertyUtils
. resolvePlaceholders ( System . getProperty ( HOME , "${user.dir}" ) ) ) ;
try {
return new File ( getPropertyWithDefault ( HOME , "${user.dir}" ) ) ;
}
catch ( Exception ex ) {
throw new IllegalStateException ( ex ) ;
}
}
private void initializeProperties ( ) throws Exception , IOException {
String config = "classpath:BOOT-INF/classes/"
+ SystemPropertyUtils . resolvePlaceholders (
SystemPropertyUtils . getProperty ( CONFIG_NAME , "application" ) )
+ ".properties" ;
config = SystemPropertyUtils . resolvePlaceholders (
SystemPropertyUtils . getProperty ( CONFIG_LOCATION , config ) ) ;
InputStream resource = getResource ( config ) ;
if ( resource ! = null ) {
log ( "Found: " + config ) ;
try {
this . properties . load ( resource ) ;
}
finally {
resource . close ( ) ;
List < String > configs = new ArrayList < String > ( ) ;
if ( getProperty ( CONFIG_LOCATION ) ! = null ) {
configs . add ( getProperty ( CONFIG_LOCATION ) ) ;
}
else {
String [ ] names = getPropertyWithDefault ( CONFIG_NAME , "loader,application" )
. split ( "," ) ;
for ( String name : names ) {
configs . add ( "file:" + getHomeDirectory ( ) + "/" + name + ".properties" ) ;
configs . add ( "classpath:" + name + ".properties" ) ;
configs . add ( "classpath:BOOT-INF/classes/" + name + ".properties" ) ;
}
for ( Object key : Collections . list ( this . properties . propertyNames ( ) ) ) {
String text = this . properties . getProperty ( ( String ) key ) ;
String value = SystemPropertyUtils . resolvePlaceholders ( this . properties ,
text ) ;
if ( value ! = null ) {
this . properties . put ( key , value ) ;
}
for ( String config : configs ) {
InputStream resource = getResource ( config ) ;
if ( resource ! = null ) {
debug ( "Found: " + config ) ;
try {
this . properties . load ( resource ) ;
}
finally {
resource . close ( ) ;
}
}
if ( SystemPropertyUtils
. resolvePlaceholders ( "${" + SET_SYSTEM_PROPERTIES + ":false}" )
. equals ( "true" ) ) {
log ( "Adding resolved properties to System properties" ) ;
for ( Object key : Collections . list ( this . properties . propertyNames ( ) ) ) {
String value = this . properties . getProperty ( ( String ) key ) ;
System . setProperty ( ( String ) key , value ) ;
if ( config . endsWith ( "application.properties" )
& & ( ( String ) key ) . startsWith ( "loader." ) ) {
warn ( "Use of application.properties for PropertiesLauncher is deprecated" ) ;
}
String text = this . properties . getProperty ( ( String ) key ) ;
String value = SystemPropertyUtils
. resolvePlaceholders ( this . properties , text ) ;
if ( value ! = null ) {
this . properties . put ( key , value ) ;
}
}
if ( "true" . equals ( getProperty ( SET_SYSTEM_PROPERTIES ) ) ) {
debug ( "Adding resolved properties to System properties" ) ;
for ( Object key : Collections . list ( this . properties . propertyNames ( ) ) ) {
String value = this . properties . getProperty ( ( String ) key ) ;
System . setProperty ( ( String ) key , value ) ;
}
}
// Load the first one we find
return ;
}
else {
debug ( "Not found: " + config ) ;
}
}
else {
log ( "Not found: " + config ) ;
}
}
private InputStream getResource ( String config ) throws Exception {
@ -216,13 +232,13 @@ public class PropertiesLauncher extends Launcher {
@@ -216,13 +232,13 @@ public class PropertiesLauncher extends Launcher {
config = config . substring ( 1 ) ;
}
config = "/" + config ;
lo g( "Trying classpath: " + config ) ;
debu g( "Trying classpath: " + config ) ;
return getClass ( ) . getResourceAsStream ( config ) ;
}
private InputStream getFileResource ( String config ) throws Exception {
File file = new File ( config ) ;
lo g( "Trying file: " + config ) ;
debu g( "Trying file: " + config ) ;
if ( file . canRead ( ) ) {
return new FileInputStream ( file ) ;
}
@ -278,7 +294,7 @@ public class PropertiesLauncher extends Launcher {
@@ -278,7 +294,7 @@ public class PropertiesLauncher extends Launcher {
if ( path ! = null ) {
this . paths = parsePathsProperty ( path ) ;
}
lo g( "Nested archive paths: " + this . paths ) ;
debu g( "Nested archive paths: " + this . paths ) ;
}
private List < String > parsePathsProperty ( String commaSeparatedPaths ) {
@ -326,7 +342,7 @@ public class PropertiesLauncher extends Launcher {
@@ -326,7 +342,7 @@ public class PropertiesLauncher extends Launcher {
String customLoaderClassName = getProperty ( "loader.classLoader" ) ;
if ( customLoaderClassName ! = null ) {
loader = wrapWithCustomClassLoader ( loader , customLoaderClassName ) ;
lo g( "Using custom class loader: " + customLoaderClassName ) ;
debu g( "Using custom class loader: " + customLoaderClassName ) ;
}
return loader ;
}
@ -354,34 +370,50 @@ public class PropertiesLauncher extends Launcher {
@@ -354,34 +370,50 @@ public class PropertiesLauncher extends Launcher {
}
private String getProperty ( String propertyKey ) throws Exception {
return getProperty ( propertyKey , null ) ;
return getProperty ( propertyKey , null , null ) ;
}
private String getProperty ( String propertyKey , String manifestKey ) throws Exception {
return getProperty ( propertyKey , manifestKey , null ) ;
}
private String getPropertyWithDefault ( String propertyKey , String defaultValue )
throws Exception {
return getProperty ( propertyKey , null , defaultValue ) ;
}
private String getProperty ( String propertyKey , String manifestKey ,
String defaultValue ) throws Exception {
if ( manifestKey = = null ) {
manifestKey = propertyKey . replace ( '.' , '-' ) ;
manifestKey = toCamelCase ( manifestKey ) ;
}
String property = SystemPropertyUtils . getProperty ( propertyKey ) ;
if ( property ! = null ) {
String value = SystemPropertyUtils . resolvePlaceholders ( property ) ;
log ( "Property '" + propertyKey + "' from environment: " + value ) ;
String value = SystemPropertyUtils . resolvePlaceholders ( this . properties ,
property ) ;
debug ( "Property '" + propertyKey + "' from environment: " + value ) ;
return value ;
}
if ( this . properties . containsKey ( propertyKey ) ) {
String value = SystemPropertyUtils
. resolvePlaceholders ( this . properties . getProperty ( propertyKey ) ) ;
lo g( "Property '" + propertyKey + "' from properties: " + value ) ;
String value = SystemPropertyUtils . resolvePlaceholders ( this . properties ,
this . properties . getProperty ( propertyKey ) ) ;
debu g( "Property '" + propertyKey + "' from properties: " + value ) ;
return value ;
}
try {
// Prefer home dir for MANIFEST if there is one
Manifest manifest = new ExplodedArchive ( this . home , false ) . getManifest ( ) ;
if ( manifest ! = null ) {
String value = manifest . getMainAttributes ( ) . getValue ( manifestKey ) ;
log ( "Property '" + manifestKey + "' from home directory manifest: "
+ value ) ;
return value ;
if ( this . home ! = null ) {
// Prefer home dir for MANIFEST if there is one
Manifest manifest = new ExplodedArchive ( this . home , false ) . getManifest ( ) ;
if ( manifest ! = null ) {
String value = manifest . getMainAttributes ( ) . getValue ( manifestKey ) ;
if ( value ! = null ) {
debug ( "Property '" + manifestKey
+ "' from home directory manifest: " + value ) ;
return SystemPropertyUtils . resolvePlaceholders ( this . properties ,
value ) ;
}
}
}
}
catch ( IllegalStateException ex ) {
@ -392,11 +424,12 @@ public class PropertiesLauncher extends Launcher {
@@ -392,11 +424,12 @@ public class PropertiesLauncher extends Launcher {
if ( manifest ! = null ) {
String value = manifest . getMainAttributes ( ) . getValue ( manifestKey ) ;
if ( value ! = null ) {
lo g( "Property '" + manifestKey + "' from archive manifest: " + value ) ;
return value ;
debu g( "Property '" + manifestKey + "' from archive manifest: " + value ) ;
return SystemPropertyUtils . resolvePlaceholders ( this . properties , value ) ;
}
}
return null ;
return defaultValue = = null ? defaultValue
: SystemPropertyUtils . resolvePlaceholders ( this . properties , defaultValue ) ;
}
@Override
@ -427,18 +460,18 @@ public class PropertiesLauncher extends Launcher {
@@ -427,18 +460,18 @@ public class PropertiesLauncher extends Launcher {
file = new File ( this . home , root ) ;
}
if ( file . isDirectory ( ) ) {
lo g( "Adding classpath entries from " + file ) ;
debu g( "Adding classpath entries from " + file ) ;
Archive archive = new ExplodedArchive ( file , false ) ;
lib . add ( archive ) ;
}
Archive archive = getArchive ( file ) ;
if ( archive ! = null ) {
lo g( "Adding classpath entries from archive " + archive . getUrl ( ) + root ) ;
debu g( "Adding classpath entries from archive " + archive . getUrl ( ) + root ) ;
lib . add ( archive ) ;
}
Archive nested = getNestedArchive ( root ) ;
if ( nested ! = null ) {
lo g( "Adding classpath entries from nested " + nested . getUrl ( ) + root ) ;
debu g( "Adding classpath entries from nested " + root ) ;
lib . add ( nested ) ;
}
return lib ;
@ -540,14 +573,21 @@ public class PropertiesLauncher extends Launcher {
@@ -540,14 +573,21 @@ public class PropertiesLauncher extends Launcher {
return Character . toUpperCase ( str . charAt ( 0 ) ) + str . substring ( 1 ) ;
}
private void lo g( String message ) {
private void debu g( String message ) {
if ( Boolean . getBoolean ( DEBUG ) ) {
// We shouldn't use java.util.logging because of classpath issues so we
// just sysout log messages when "loader.debug" is true
System . out . println ( message ) ;
log ( message ) ;
}
}
private void warn ( String message ) {
log ( "WARNING: " + message ) ;
}
private void log ( String message ) {
// We shouldn't use java.util.logging because of classpath issues
System . out . println ( message ) ;
}
/ * *
* Convenience class for finding nested archives that have a prefix in their file path
* ( e . g . "lib/" ) .