Browse Source

add environment variable support in <java> for forked VMs.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271000 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 23 years ago
parent
commit
1df308115f
3 changed files with 59 additions and 2 deletions
  1. +3
    -0
      WHATSNEW
  2. +16
    -1
      docs/manual/CoreTasks/java.html
  3. +40
    -1
      src/main/org/apache/tools/ant/taskdefs/Java.java

+ 3
- 0
WHATSNEW View File

@@ -135,6 +135,9 @@ Other changes:
* A "package" mapper type has been added to allow package directory
names replaced with the dotted form.
* you can now specify environment variables in the <java> task
if the fork attribute has been set to true.

Changes from Ant 1.4 to Ant 1.4.1
===========================================



+ 16
- 1
docs/manual/CoreTasks/java.html View File

@@ -94,6 +94,13 @@ JVM.
<td valign="top">Name of a file to write the output to.</td>
<td align="center" valign="top">No</td>
</tr>
<tr>
<td valign="top">newenvironment</td>
<td valign="top">Do not propagate old environment when new
environment variables are specified. Default is &quot;false&quot;
(ignored if fork is disabled).</td>
<td align="center" valign="top">No</td>
</tr>
</table>
<h3>Parameters specified as nested elements</h3>
<h4>arg and jvmarg</h4>
@@ -111,6 +118,14 @@ variables</a>.</p>
<p><code>Java</code>'s <i>classpath</i> attribute is a <a
href="../using.html#path">PATH like structure</a> and can also be set via a nested
<i>classpath</i> element.</p>
<h4>env</h4>
<p>It is possible to specify environment variables to pass to the
forked VM via nested <i>env</i> elements. See the description in the
section about <a href="exec.html#env">exec</a></p>
<p>Please note that the environment of the current Ant process is
<b>not</b> passed to the forked VM if you specify variables using
<i>env</i>.</p>
<p>Settings will be ignored if fork is disabled.</p>
<h3>Examples</h3>
<pre>
&lt;java classname=&quot;test.Main&quot; &gt;
@@ -150,7 +165,7 @@ and with a maximum memory of 128MB. Any non zero return code breaks the build.
JVM, as it takes different parameters for other JVMs,
That JVM can be started from &lt;exec&gt; if required.
<hr>
<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
Reserved.</p>

</body>


+ 40
- 1
src/main/org/apache/tools/ant/taskdefs/Java.java View File

@@ -1,7 +1,7 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000-2001 The Apache Software Foundation. All rights
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -81,7 +81,9 @@ import java.util.Vector;
public class Java extends Task {

private CommandlineJava cmdl = new CommandlineJava();
private Environment env = new Environment();
private boolean fork = false;
private boolean newEnvironment = false;
private File dir = null;
private File out;
private PrintStream outStream = null;
@@ -128,6 +130,11 @@ public class Java extends Task {
log("Working directory ignored when same JVM is used.", Project.MSG_WARN);
}

if (newEnvironment || null != env.getVariables()) {
log("Changes to environment variables are ignored when same JVM is used.",
Project.MSG_WARN);
}

log("Running in same VM " + cmdl.getJavaCommand().toString(),
Project.MSG_VERBOSE);
try {
@@ -268,6 +275,28 @@ public class Java extends Task {
cmdl.setVmversion(value);
}
/**
* Add a nested env element - an environment variable.
*
* <p>Will be ignored if we are not forking a new VM.
*
* @since 1.32, Ant 1.5
*/
public void addEnv(Environment.Variable var) {
env.addVariable(var);
}

/**
* Use a completely new environment
*
* <p>Will be ignored if we are not forking a new VM.
*
* @since 1.32, Ant 1.5
*/
public void setNewenvironment(boolean newenv) {
newEnvironment = newenv;
}

protected void handleOutput(String line) {
if (outStream != null) {
outStream.println(line);
@@ -340,6 +369,16 @@ public class Java extends Task {
exe.setWorkingDirectory(dir);
String[] environment = env.getVariables();
if (environment != null) {
for (int i=0; i<environment.length; i++) {
log("Setting environment variable: "+environment[i],
Project.MSG_VERBOSE);
}
}
exe.setNewenvironment(newEnvironment);
exe.setEnvironment(environment);

exe.setCommandline(command);
try {
return exe.execute();


Loading…
Cancel
Save