2
0
Fork 0
mirror of https://github.com/ethauvin/bld.git synced 2025-04-25 00:07:12 -07:00

Fixed #58 : Add an option to set environment variables before spawining a process

This commit is contained in:
Geert Bevin 2025-01-22 18:30:07 -05:00
parent f9f20e62ef
commit ca7fa0c4b8
2 changed files with 40 additions and 1 deletions

View file

@ -11,7 +11,9 @@ import rife.tools.exceptions.FileUtilsErrorException;
import java.io.*; import java.io.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
/** /**
@ -24,6 +26,7 @@ public abstract class AbstractProcessOperation<T extends AbstractProcessOperatio
public static final String DEFAULT_JAVA_TOOL = "java"; public static final String DEFAULT_JAVA_TOOL = "java";
protected File workDirectory_ = new File(System.getProperty("user.dir")); protected File workDirectory_ = new File(System.getProperty("user.dir"));
protected final Map<String, String> environment_ = new HashMap<>();
protected String javaTool_ = DEFAULT_JAVA_TOOL; protected String javaTool_ = DEFAULT_JAVA_TOOL;
protected final JavaOptions javaOptions_ = new JavaOptions(); protected final JavaOptions javaOptions_ = new JavaOptions();
protected final List<String> classpath_ = new ArrayList<>(); protected final List<String> classpath_ = new ArrayList<>();
@ -87,6 +90,10 @@ public abstract class AbstractProcessOperation<T extends AbstractProcessOperatio
var builder = new ProcessBuilder(executeConstructProcessCommandList()); var builder = new ProcessBuilder(executeConstructProcessCommandList());
builder.directory(workDirectory()); builder.directory(workDirectory());
if (!environment_.isEmpty()) {
builder.environment().putAll(environment_);
}
builder.redirectInput(ProcessBuilder.Redirect.INHERIT); builder.redirectInput(ProcessBuilder.Redirect.INHERIT);
final var output_processor = outputProcessor(); final var output_processor = outputProcessor();
@ -163,6 +170,18 @@ public abstract class AbstractProcessOperation<T extends AbstractProcessOperatio
return (T) this; return (T) this;
} }
/**
* Provides environment variable entries to use for the operation.
*
* @param environment environment entries for the operation
* @return this operation instance
* @since 2.2.1
*/
public T environment(Map<String, String> environment) {
environment_.putAll(environment);
return (T) this;
}
/** /**
* Provides the name of the tool to use for {@code java} execution. * Provides the name of the tool to use for {@code java} execution.
* <p> * <p>
@ -303,6 +322,18 @@ public abstract class AbstractProcessOperation<T extends AbstractProcessOperatio
return workDirectory_; return workDirectory_;
} }
/**
* Retrieves the environment to use for the operation.
* <p>
* This is a modifiable map that can be retrieved and changed.
*
* @return the operation's environment
* @since 2.2.1
*/
public Map<String, String> environment() {
return environment_;
}
/** /**
* retrieves the name of the tool to use for {@code java} execution. * retrieves the name of the tool to use for {@code java} execution.
* *

View file

@ -11,6 +11,7 @@ import rife.tools.FileUtils;
import java.io.File; import java.io.File;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
import java.util.jar.Attributes; import java.util.jar.Attributes;
@ -24,6 +25,7 @@ public class TestRunOperation {
assertTrue(operation.workDirectory().exists()); assertTrue(operation.workDirectory().exists());
assertTrue(operation.workDirectory().isDirectory()); assertTrue(operation.workDirectory().isDirectory());
assertTrue(operation.workDirectory().canWrite()); assertTrue(operation.workDirectory().canWrite());
assertTrue(operation.environment().isEmpty());
assertEquals("java", operation.javaTool()); assertEquals("java", operation.javaTool());
assertTrue(operation.javaOptions().isEmpty()); assertTrue(operation.javaOptions().isEmpty());
assertTrue(operation.classpath().isEmpty()); assertTrue(operation.classpath().isEmpty());
@ -38,6 +40,7 @@ public class TestRunOperation {
@Test @Test
void testPopulation() void testPopulation()
throws Exception { throws Exception {
var environment = Map.of("env1", "val1", "env2", "val2", "env3", "val3");
var work_directory = Files.createTempDirectory("test").toFile(); var work_directory = Files.createTempDirectory("test").toFile();
try { try {
var java_tool = "javatool"; var java_tool = "javatool";
@ -55,6 +58,7 @@ public class TestRunOperation {
var operation1 = new RunOperation(); var operation1 = new RunOperation();
operation1 operation1
.workDirectory(work_directory) .workDirectory(work_directory)
.environment(environment)
.javaTool(java_tool) .javaTool(java_tool)
.javaOptions(List.of(run_java_option1, run_java_option2)) .javaOptions(List.of(run_java_option1, run_java_option2))
.classpath(List.of(run_classpath1, run_classpath2)) .classpath(List.of(run_classpath1, run_classpath2))
@ -65,6 +69,7 @@ public class TestRunOperation {
.errorProcessor(run_error_consumer); .errorProcessor(run_error_consumer);
assertEquals(work_directory, operation1.workDirectory()); assertEquals(work_directory, operation1.workDirectory());
assertEquals(environment, operation1.environment());
assertEquals(java_tool, operation1.javaTool()); assertEquals(java_tool, operation1.javaTool());
assertTrue(operation1.javaOptions().contains(run_java_option1)); assertTrue(operation1.javaOptions().contains(run_java_option1));
assertTrue(operation1.javaOptions().contains(run_java_option2)); assertTrue(operation1.javaOptions().contains(run_java_option2));
@ -79,6 +84,7 @@ public class TestRunOperation {
var operation2 = new RunOperation(); var operation2 = new RunOperation();
operation2.workDirectory(work_directory); operation2.workDirectory(work_directory);
operation2.environment(environment);
operation2.javaTool(java_tool); operation2.javaTool(java_tool);
operation2.javaOptions().add(run_java_option1); operation2.javaOptions().add(run_java_option1);
operation2.javaOptions().add(run_java_option2); operation2.javaOptions().add(run_java_option2);
@ -92,6 +98,7 @@ public class TestRunOperation {
operation2.errorProcessor(run_error_consumer); operation2.errorProcessor(run_error_consumer);
assertEquals(work_directory, operation2.workDirectory()); assertEquals(work_directory, operation2.workDirectory());
assertEquals(environment, operation2.environment());
assertEquals(java_tool, operation2.javaTool()); assertEquals(java_tool, operation2.javaTool());
assertTrue(operation2.javaOptions().contains(run_java_option1)); assertTrue(operation2.javaOptions().contains(run_java_option1));
assertTrue(operation2.javaOptions().contains(run_java_option2)); assertTrue(operation2.javaOptions().contains(run_java_option2));
@ -129,7 +136,7 @@ public class TestRunOperation {
public class Source1 { public class Source1 {
public final String name_; public final String name_;
public Source1() { public Source1() {
name_ = "source1"; name_ = System.getenv("execute_name");
} }
public static void main(String[] arguments) public static void main(String[] arguments)
@ -149,6 +156,7 @@ public class TestRunOperation {
var output = new StringBuilder(); var output = new StringBuilder();
var run_operation = new RunOperation() var run_operation = new RunOperation()
.environment(Map.of("execute_name", "source1"))
.mainClass("Source1") .mainClass("Source1")
.classpath(List.of(build_main.getAbsolutePath())) .classpath(List.of(build_main.getAbsolutePath()))
.outputProcessor(s -> { .outputProcessor(s -> {