From 14b24b7e2bd5ac8b8776531dc26312d0c651ce10 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Sun, 3 Jul 2022 20:51:45 +0100 Subject: [PATCH] Support configuring run environment variables & Fixes #653 --- .../loom/configuration/ide/RunConfig.java | 16 ++++++++++++++++ .../configuration/ide/RunConfigSettings.java | 11 +++++++++++ .../net/fabricmc/loom/task/AbstractRunTask.java | 1 + .../fabricmc/loom/task/GenVsCodeProjectTask.java | 6 ++++++ .../resources/eclipse_run_config_template.xml | 3 +++ src/main/resources/idea_run_config_template.xml | 3 +++ 6 files changed, 40 insertions(+) diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java index c750f789..24a668f1 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java @@ -30,11 +30,13 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.stream.Collectors; import com.google.common.collect.ImmutableMap; import com.google.gson.JsonElement; @@ -68,6 +70,8 @@ public class RunConfig { public List vmArgs = new ArrayList<>(); public List programArgs = new ArrayList<>(); public SourceSet sourceSet; + public Map environmentVariables; + public String projectName; public Element genRuns(Element doc) { Element root = this.addXml(doc, "component", ImmutableMap.of("name", "ProjectRunConfigurationManager")); @@ -174,6 +178,9 @@ public class RunConfig { runConfig.programArgs.addAll(settings.getProgramArgs()); runConfig.vmArgs.addAll(settings.getVmArgs()); runConfig.vmArgs.add("-Dfabric.dli.main=" + getMainClass(environment, extension, defaultMain)); + runConfig.environmentVariables = new HashMap<>(); + runConfig.environmentVariables.putAll(settings.getEnvironmentVariables()); + runConfig.projectName = project.getName(); return runConfig; } @@ -202,10 +209,19 @@ public class RunConfig { dummyConfig = dummyConfig.replace("%RUN_DIRECTORY%", runDir); dummyConfig = dummyConfig.replace("%PROGRAM_ARGS%", joinArguments(programArgs).replaceAll("\"", """)); dummyConfig = dummyConfig.replace("%VM_ARGS%", joinArguments(vmArgs).replaceAll("\"", """)); + dummyConfig = dummyConfig.replace("%IDEA_ENV_VARS%", getEnvVars("")); + dummyConfig = dummyConfig.replace("%ECLIPSE_ENV_VARS%", getEnvVars("")); return dummyConfig; } + private String getEnvVars(String pattern) { + return environmentVariables.entrySet().stream() + .map(entry -> + pattern.formatted(entry.getKey(), entry.getValue().toString()) + ).collect(Collectors.joining()); + } + public static String joinArguments(List args) { final var sb = new StringBuilder(); boolean first = true; diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java index deb3fa8b..f369794e 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfigSettings.java @@ -28,6 +28,7 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -95,6 +96,8 @@ public final class RunConfigSettings implements Named { */ private boolean ideConfigGenerated; + private final Map environmentVariables = new HashMap<>(); + private final Project project; private final LoomGradleExtension extension; @@ -241,6 +244,14 @@ public final class RunConfigSettings implements Named { this.ideConfigGenerated = ideConfigGenerated; } + public Map getEnvironmentVariables() { + return environmentVariables; + } + + public void environmentVariable(String name, Object value) { + environmentVariables.put(name, value); + } + /** * Add the {@code -XstartOnFirstThread} JVM argument when on OSX. */ diff --git a/src/main/java/net/fabricmc/loom/task/AbstractRunTask.java b/src/main/java/net/fabricmc/loom/task/AbstractRunTask.java index d4ee306f..6b14f5bd 100644 --- a/src/main/java/net/fabricmc/loom/task/AbstractRunTask.java +++ b/src/main/java/net/fabricmc/loom/task/AbstractRunTask.java @@ -53,6 +53,7 @@ public abstract class AbstractRunTask extends JavaExec { @Override public void exec() { setWorkingDir(new File(getProject().getProjectDir(), config.runDir)); + environment(config.environmentVariables); super.exec(); } diff --git a/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java b/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java index ab6fc5fa..9a30a312 100644 --- a/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java @@ -29,7 +29,9 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.commons.io.FileUtils; import org.gradle.api.Project; @@ -99,6 +101,8 @@ public class GenVsCodeProjectTask extends AbstractLoomTask { public String mainClass; public String vmArgs; public String args; + public Map env; + public String projectName; VsCodeConfiguration(RunConfig runConfig) { this.name = runConfig.configName; @@ -106,6 +110,8 @@ public class GenVsCodeProjectTask extends AbstractLoomTask { this.vmArgs = RunConfig.joinArguments(runConfig.vmArgs); this.args = RunConfig.joinArguments(runConfig.programArgs); this.cwd = "${workspaceFolder}/" + runConfig.runDir; + this.env = new HashMap<>(runConfig.environmentVariables); + this.projectName = runConfig.projectName; if (getProject().getRootProject() != getProject()) { Path rootPath = getProject().getRootDir().toPath(); diff --git a/src/main/resources/eclipse_run_config_template.xml b/src/main/resources/eclipse_run_config_template.xml index cff2835c..737e9cd3 100644 --- a/src/main/resources/eclipse_run_config_template.xml +++ b/src/main/resources/eclipse_run_config_template.xml @@ -6,6 +6,9 @@ + + %ECLIPSE_ENV_VARS% + diff --git a/src/main/resources/idea_run_config_template.xml b/src/main/resources/idea_run_config_template.xml index 0891bc84..8340e663 100644 --- a/src/main/resources/idea_run_config_template.xml +++ b/src/main/resources/idea_run_config_template.xml @@ -8,5 +8,8 @@ + + %IDEA_ENV_VARS% +