diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java index 2f6b42e43..02fc038f6 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java @@ -64,6 +64,7 @@ import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Permissions; import org.apache.tools.ant.types.PropertySet; import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.JavaEnvUtils; import org.apache.tools.ant.util.LoaderUtils; import org.apache.tools.ant.util.SplitClassLoader; import org.apache.tools.ant.util.StringUtils; @@ -1164,6 +1165,15 @@ public class JUnitTask extends Task { } catch (final CloneNotSupportedException e) { throw new BuildException("This shouldn't happen", e, getLocation()); } + // if Java 18, then we set -Djava.security.manager=allow so as to allow + // Ant code to internally set the security manager + if (JavaEnvUtils.isAtLeastJavaVersion("18")) { + log("Setting -Djava.security.manager=allow on forked JVM of JUnit task", Project.MSG_VERBOSE); + final Environment.Variable securityManagerSysProp = new Environment.Variable(); + securityManagerSysProp.setKey("java.security.manager"); + securityManagerSysProp.setValue("allow"); + cmd.addSysproperty(securityManagerSysProp); + } if (casesFile == null) { cmd.createArgument().setValue(test.getName()); if (test.getMethods() != null) {