diff --git a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/AbstractFrontendMojo.java b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/AbstractFrontendMojo.java index 9fafb29c6..226166553 100644 --- a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/AbstractFrontendMojo.java +++ b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/AbstractFrontendMojo.java @@ -11,6 +11,7 @@ import org.slf4j.LoggerFactory; import java.io.File; +import java.util.Map; public abstract class AbstractFrontendMojo extends AbstractMojo { @@ -35,6 +36,13 @@ public abstract class AbstractFrontendMojo extends AbstractMojo { @Parameter(property = "installDirectory", required = false) protected File installDirectory; + + /** + * Additional environment variables to pass to the build. + */ + @Parameter + protected Map environmentVariables; + /** * Determines if this execution should be skipped. */ diff --git a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/BowerMojo.java b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/BowerMojo.java index d670e4ca2..59f872258 100644 --- a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/BowerMojo.java +++ b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/BowerMojo.java @@ -39,6 +39,6 @@ protected boolean skipExecution() { @Override protected void execute(FrontendPluginFactory factory) throws TaskRunnerException { ProxyConfig proxyConfig = MojoUtils.getProxyConfig(session, decrypter); - factory.getBowerRunner(proxyConfig).execute(arguments); + factory.getBowerRunner(proxyConfig).execute(arguments, environmentVariables); } } diff --git a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/EmberMojo.java b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/EmberMojo.java index f1a66c0be..65a79ee9a 100644 --- a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/EmberMojo.java +++ b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/EmberMojo.java @@ -61,7 +61,7 @@ protected boolean skipExecution() { @Override public void execute(FrontendPluginFactory factory) throws TaskRunnerException { if (shouldExecute()) { - factory.getEmberRunner().execute(arguments); + factory.getEmberRunner().execute(arguments, environmentVariables); if (outputdir != null) { getLog().info("Refreshing files after ember: " + outputdir); diff --git a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/GruntMojo.java b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/GruntMojo.java index 131b4bc56..ca04e882a 100644 --- a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/GruntMojo.java +++ b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/GruntMojo.java @@ -61,7 +61,7 @@ protected boolean skipExecution() { @Override public void execute(FrontendPluginFactory factory) throws TaskRunnerException { if (shouldExecute()) { - factory.getGruntRunner().execute(arguments); + factory.getGruntRunner().execute(arguments, environmentVariables); if (outputdir != null) { getLog().info("Refreshing files after grunt: " + outputdir); diff --git a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/GulpMojo.java b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/GulpMojo.java index 9868ea027..44c12e951 100644 --- a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/GulpMojo.java +++ b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/GulpMojo.java @@ -61,7 +61,7 @@ protected boolean skipExecution() { @Override public void execute(FrontendPluginFactory factory) throws TaskRunnerException { if (shouldExecute()) { - factory.getGulpRunner().execute(arguments); + factory.getGulpRunner().execute(arguments, environmentVariables); if (outputdir != null) { getLog().info("Refreshing files after gulp: " + outputdir); diff --git a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/JspmMojo.java b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/JspmMojo.java index 9d6a5170e..5301f5769 100644 --- a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/JspmMojo.java +++ b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/JspmMojo.java @@ -33,7 +33,7 @@ protected boolean skipExecution() { @Override protected void execute(FrontendPluginFactory factory) throws TaskRunnerException { - factory.getJspmRunner().execute(arguments); + factory.getJspmRunner().execute(arguments, environmentVariables); } } diff --git a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/KarmaRunMojo.java b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/KarmaRunMojo.java index 223d006cc..420943b95 100644 --- a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/KarmaRunMojo.java +++ b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/KarmaRunMojo.java @@ -37,7 +37,7 @@ protected boolean skipExecution() { @Override public void execute(FrontendPluginFactory factory) throws TaskRunnerException { try { - factory.getKarmaRunner().execute("start " + karmaConfPath); + factory.getKarmaRunner().execute("start " + karmaConfPath, environmentVariables); } catch (TaskRunnerException e) { if (testFailureIgnore) { diff --git a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/NpmMojo.java b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/NpmMojo.java index 0e9522115..e976f64a6 100644 --- a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/NpmMojo.java +++ b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/NpmMojo.java @@ -47,7 +47,7 @@ public void execute(FrontendPluginFactory factory) throws TaskRunnerException { File packageJson = new File(workingDirectory, "package.json"); if (buildContext == null || buildContext.hasDelta(packageJson) || !buildContext.isIncremental()) { ProxyConfig proxyConfig = MojoUtils.getProxyConfig(session, decrypter); - factory.getNpmRunner(proxyConfig).execute(arguments); + factory.getNpmRunner(proxyConfig).execute(arguments, environmentVariables); } else { getLog().info("Skipping npm install as package.json unchanged"); } diff --git a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/WebpackMojo.java b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/WebpackMojo.java index 8fb24f183..c061de497 100644 --- a/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/WebpackMojo.java +++ b/frontend-maven-plugin/src/main/java/com/github/eirslett/maven/plugins/frontend/mojo/WebpackMojo.java @@ -61,7 +61,7 @@ protected boolean skipExecution() { @Override public void execute(FrontendPluginFactory factory) throws TaskRunnerException { if (shouldExecute()) { - factory.getWebpackRunner().execute(arguments); + factory.getWebpackRunner().execute(arguments, environmentVariables); if (outputdir != null) { getLog().info("Refreshing files after webpack: " + outputdir); diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/BowerRunner.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/BowerRunner.java index 1c85e4c63..684278a8a 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/BowerRunner.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/BowerRunner.java @@ -3,9 +3,7 @@ import java.util.ArrayList; import java.util.List; -public interface BowerRunner { - void execute(String args) throws TaskRunnerException; -} +public interface BowerRunner extends NodeTaskRunner {} final class DefaultBowerRunner extends NodeTaskExecutor implements BowerRunner { diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/EmberRunner.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/EmberRunner.java index bddebc74f..28c95fda1 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/EmberRunner.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/EmberRunner.java @@ -1,8 +1,6 @@ package com.github.eirslett.maven.plugins.frontend.lib; -public interface EmberRunner { - void execute(String args) throws TaskRunnerException; -} +public interface EmberRunner extends NodeTaskRunner {} final class DefaultEmberRunner extends NodeTaskExecutor implements EmberRunner { diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/GruntRunner.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/GruntRunner.java index f50935db8..1c17d1504 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/GruntRunner.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/GruntRunner.java @@ -2,9 +2,7 @@ import java.util.Arrays; -public interface GruntRunner { - void execute(String args) throws TaskRunnerException; -} +public interface GruntRunner extends NodeTaskRunner {} final class DefaultGruntRunner extends NodeTaskExecutor implements GruntRunner { diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/GulpRunner.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/GulpRunner.java index 677d23ef2..d9674189c 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/GulpRunner.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/GulpRunner.java @@ -2,9 +2,7 @@ import java.util.Arrays; -public interface GulpRunner { - void execute(String args) throws TaskRunnerException; -} +public interface GulpRunner extends NodeTaskRunner {} final class DefaultGulpRunner extends NodeTaskExecutor implements GulpRunner { private static final String TASK_LOCATION = "node_modules/gulp/bin/gulp.js"; diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/JspmRunner.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/JspmRunner.java index d4c20e522..1db8d08af 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/JspmRunner.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/JspmRunner.java @@ -1,9 +1,6 @@ package com.github.eirslett.maven.plugins.frontend.lib; -public interface JspmRunner { - void execute(String args) throws TaskRunnerException; -} - +public interface JspmRunner extends NodeTaskRunner {} final class DefaultJspmRunner extends NodeTaskExecutor implements JspmRunner { diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/KarmaRunner.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/KarmaRunner.java index c8bfbc621..9ae1cd936 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/KarmaRunner.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/KarmaRunner.java @@ -2,9 +2,7 @@ import java.util.Arrays; -public interface KarmaRunner { - void execute(String args) throws TaskRunnerException; -} +public interface KarmaRunner extends NodeTaskRunner {} final class DefaultKarmaRunner extends NodeTaskExecutor implements KarmaRunner { diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeAndNPMInstaller.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeAndNPMInstaller.java index 548065a84..51dd4c244 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeAndNPMInstaller.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeAndNPMInstaller.java @@ -77,7 +77,7 @@ private boolean nodeIsAlreadyInstalled() { NodeExecutorConfig executorConfig = new InstallNodeExecutorConfig(config); File nodeFile = executorConfig.getNodePath(); if(nodeFile.exists()){ - final String version = new NodeExecutor(executorConfig, Arrays.asList("--version")).executeAndGetResult(); + final String version = new NodeExecutor(executorConfig, Arrays.asList("--version"), null).executeAndGetResult(); if(version.equals(nodeVersion)){ logger.info("Node " + version + " is already installed."); diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeExecutor.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeExecutor.java index e5101cdb3..47b1cae84 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeExecutor.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeExecutor.java @@ -4,11 +4,12 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; final class NodeExecutor { private final ProcessExecutor executor; - public NodeExecutor(NodeExecutorConfig config, List arguments){ + public NodeExecutor(NodeExecutorConfig config, List arguments, Map additionalEnvironment){ final String node = config.getNodePath().getAbsolutePath(); List localPaths = new ArrayList(); localPaths.add(config.getNodePath().getParent()); @@ -16,7 +17,8 @@ public NodeExecutor(NodeExecutorConfig config, List arguments){ config.getWorkingDirectory(), localPaths, Utils.prepend(node, arguments), - config.getPlatform()); + config.getPlatform(), + additionalEnvironment); } public String executeAndGetResult() throws ProcessExecutionException { diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeTaskExecutor.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeTaskExecutor.java index 955dee32c..da92602d6 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeTaskExecutor.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeTaskExecutor.java @@ -12,6 +12,7 @@ import static com.github.eirslett.maven.plugins.frontend.lib.Utils.implode; import static com.github.eirslett.maven.plugins.frontend.lib.Utils.normalize; import static com.github.eirslett.maven.plugins.frontend.lib.Utils.prepend; +import java.util.Map; abstract class NodeTaskExecutor { private static final String DS = "//"; @@ -48,13 +49,13 @@ private static String getTaskNameFromLocation(String taskLocation) { } - public final void execute(String args) throws TaskRunnerException { + public final void execute(String args, Map environment) throws TaskRunnerException { final String absoluteTaskLocation = getAbsoluteTaskLocation(); final List arguments = getArguments(args); logger.info("Running " + taskToString(taskName, arguments) + " in " + config.getWorkingDirectory()); try { - final int result = new NodeExecutor(config, prepend(absoluteTaskLocation, arguments)).executeAndRedirectOutput(logger); + final int result = new NodeExecutor(config, prepend(absoluteTaskLocation, arguments), environment).executeAndRedirectOutput(logger); if (result != 0) { throw new TaskRunnerException(taskToString(taskName, arguments) + " failed. (error code " + result + ")"); } diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeTaskRunner.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeTaskRunner.java new file mode 100644 index 000000000..98d224acc --- /dev/null +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeTaskRunner.java @@ -0,0 +1,7 @@ +package com.github.eirslett.maven.plugins.frontend.lib; + +import java.util.Map; + +interface NodeTaskRunner { + void execute(String args, Map environment) throws TaskRunnerException; +} diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NpmRunner.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NpmRunner.java index 3d32683d0..3e71de8dd 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NpmRunner.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NpmRunner.java @@ -5,9 +5,7 @@ import java.util.ArrayList; import java.util.List; -public interface NpmRunner { - void execute(String args) throws TaskRunnerException; -} +public interface NpmRunner extends NodeTaskRunner {} final class DefaultNpmRunner extends NodeTaskExecutor implements NpmRunner { static final String TASK_NAME = "npm"; diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/ProcessExecutor.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/ProcessExecutor.java index 9ebfe641f..6cf709c66 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/ProcessExecutor.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/ProcessExecutor.java @@ -25,12 +25,14 @@ final class ProcessExecutor { private final List command; private final ProcessBuilder processBuilder; private final Platform platform; + private final Map additionalEnvironment; - public ProcessExecutor(File workingDirectory, List paths, List command, Platform platform){ + public ProcessExecutor(File workingDirectory, List paths, List command, Platform platform, Map additionalEnvironment){ this.workingDirectory = workingDirectory; this.localPaths = paths; this.command = command; this.platform = platform; + this.additionalEnvironment = additionalEnvironment; this.processBuilder = createProcessBuilder(); } @@ -97,6 +99,9 @@ private ProcessBuilder createProcessBuilder(){ } environment.put(pathVarName, pathBuilder.toString()); + if (additionalEnvironment != null) { + environment.putAll(additionalEnvironment); + } return pbuilder; } diff --git a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/WebpackRunner.java b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/WebpackRunner.java index fa40784d0..c593453f0 100644 --- a/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/WebpackRunner.java +++ b/frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/WebpackRunner.java @@ -2,9 +2,7 @@ import java.util.ArrayList; -public interface WebpackRunner { - void execute(String args) throws TaskRunnerException; -} +public interface WebpackRunner extends NodeTaskRunner {} final class DefaultWebpackRunner extends NodeTaskExecutor implements WebpackRunner {