@ -17,11 +17,14 @@
@@ -17,11 +17,14 @@
package org.springframework.boot.gradle.tasks.bundling ;
import java.io.IOException ;
import java.util.Collections ;
import java.util.LinkedHashMap ;
import java.util.List ;
import java.util.Map ;
import org.gradle.api.Action ;
import org.gradle.api.DefaultTask ;
import org.gradle.api.InvalidUserDataException ;
import org.gradle.api.Project ;
import org.gradle.api.Task ;
import org.gradle.api.file.RegularFileProperty ;
@ -30,6 +33,7 @@ import org.gradle.api.provider.MapProperty;
@@ -30,6 +33,7 @@ import org.gradle.api.provider.MapProperty;
import org.gradle.api.provider.Property ;
import org.gradle.api.tasks.Input ;
import org.gradle.api.tasks.InputFile ;
import org.gradle.api.tasks.Internal ;
import org.gradle.api.tasks.Nested ;
import org.gradle.api.tasks.Optional ;
import org.gradle.api.tasks.PathSensitive ;
@ -102,6 +106,23 @@ public abstract class BootBuildImage extends DefaultTask {
@@ -102,6 +106,23 @@ public abstract class BootBuildImage extends DefaultTask {
this . docker = getProject ( ) . getObjects ( ) . newInstance ( DockerSpec . class ) ;
this . pullPolicy = getProject ( ) . getObjects ( ) . property ( PullPolicy . class ) ;
getSecurityOptions ( ) . convention ( ( Iterable < ? extends String > ) null ) ;
getEffectiveEnvironment ( ) . putAll ( getEnvironment ( ) ) ;
getEffectiveEnvironment ( ) . putAll ( getEnvironmentFromCommandLine ( ) . map ( BootBuildImage : : asMap ) ) ;
}
private static Map < String , String > asMap ( List < String > variables ) {
Map < String , String > environment = new LinkedHashMap < > ( ) ;
for ( String variable : variables ) {
int index = variable . indexOf ( '=' ) ;
if ( index < = 0 ) {
throw new InvalidUserDataException (
"Invalid value for option '--environment'. Expected 'NAME=VALUE' but got '" + variable + "'." ) ;
}
String name = variable . substring ( 0 , index ) ;
String value = variable . substring ( index + 1 ) ;
environment . put ( name , value ) ;
}
return environment ;
}
/ * *
@ -157,9 +178,22 @@ public abstract class BootBuildImage extends DefaultTask {
@@ -157,9 +178,22 @@ public abstract class BootBuildImage extends DefaultTask {
* Returns the environment that will be used when building the image .
* @return the environment
* /
@Inpu t
@Internal
public abstract MapProperty < String , String > getEnvironment ( ) ;
/ * *
* Returns environment variables contributed from the command line . Each entry must be
* in the form NAME = VALUE .
* @return the environment variables from the command line
* /
@Internal
@Option ( option = "environment" , description = "Environment variable that will be used when building the image "
+ "(NAME=VALUE). Can be specified multiple times." )
abstract ListProperty < String > getEnvironmentFromCommandLine ( ) ;
@Input
abstract MapProperty < String , String > getEffectiveEnvironment ( ) ;
/ * *
* Returns whether caches should be cleaned before packaging .
* @return whether caches should be cleaned
@ -413,8 +447,8 @@ public abstract class BootBuildImage extends DefaultTask {
@@ -413,8 +447,8 @@ public abstract class BootBuildImage extends DefaultTask {
}
private BuildRequest customizeEnvironment ( BuildRequest request ) {
Map < String , String > environment = getEnvironment ( ) . getOrNull ( ) ;
if ( ! CollectionUtils . isEmpty ( environment ) ) {
Map < String , String > environment = getEffectiveE nvironment ( ) . getOrElse ( Collections . emptyMap ( ) ) ;
if ( ! environment . isEmpty ( ) ) {
request = request . withEnv ( environment ) ;
}
return request ;