/** * Try to get configuration property {@code propertyName} in the next order:<ol> * <li>-D${propertyName} Java runtime property in gradle command</li> * <li>-P${propertyName} gradle runtime property in gradle command</li> * <li>${propertyName} in ~/.gradle/gradle.properties (user global gradle properties)</li> * <li>${propertyName} in gradle.properties (project local gradle properties)</li> * <li>${propToEnvName(propertyName)} as environment variable</li> * </ol> * @param propertyName in lowercase dotted Java properties format * @return property value, if found, otherwise - <b>null</b> */StringgetConfigurationProperty(StringpropertyName){returnSystem.getProperty(propertyName)?:project.properties.getOrDefault(propertyName,System.getenv(propToEnvName(propertyName)))}/** * Same as {@link #getConfigurationProperty(String)}, but returns {@code defaultValue} if property is not */StringgetConfigurationPropertyOrDefault(StringpropertyName,StringdefaultValue){returngetConfigurationProperty(propertyName)?:defaultValue}/** * Same as {@link #getConfigurationProperty(String)}, but throws {@link IllegalStateException} if property not found */StringgetConfigurationPropertyOrThrow(StringpropertyName){finalvalue=getConfigurationProperty(propertyName)if(value==null){thrownewIllegalStateException("Configuration property \"${propertyName}\" is mandatory, but not found. "+"Please specify one of (in order of priority):\n"+" 1) -D${propertyName} Java runtime property in gradle command\n"+" 2) -P${propertyName} gradle runtime property in gradle command\n"+" 3) ${propertyName} in ~/.gradle/gradle.properties (user global gradle properties)\n"+" 4) ${propertyName} in gradle.properties (project local gradle properties)\n"+" 5) ${propToEnvName(propertyName)} as environment variable\n")}returnvalue}/** * Convert Java property name ({@code lower.case.dotted}) to respective environment variable name * ({@code UPPER_CASE_UNDERSCORED}) * @param propertyName non-null property name to convert * @return uppercased and underscored {@code propertyName} */StringpropToEnvName(StringpropertyName){returnpropertyName.replaceAll(/\./,'_').toUpperCase()}/** * Test properties reading priority in example of {@code a.b} property */tasktestProperties(type:Task){println"prop=\"${getConfigurationPropertyOrThrow("a.b")}\""}
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.