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 * A "package" mapper type has been added to allow package directory
names replaced with the dotted form. 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 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 valign="top">Name of a file to write the output to.</td>
<td align="center" valign="top">No</td> <td align="center" valign="top">No</td>
</tr> </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> </table>
<h3>Parameters specified as nested elements</h3> <h3>Parameters specified as nested elements</h3>
<h4>arg and jvmarg</h4> <h4>arg and jvmarg</h4>
@@ -111,6 +118,14 @@ variables</a>.</p>
<p><code>Java</code>'s <i>classpath</i> attribute is a <a <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 href="../using.html#path">PATH like structure</a> and can also be set via a nested
<i>classpath</i> element.</p> <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> <h3>Examples</h3>
<pre> <pre>
&lt;java classname=&quot;test.Main&quot; &gt; &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, JVM, as it takes different parameters for other JVMs,
That JVM can be started from &lt;exec&gt; if required. That JVM can be started from &lt;exec&gt; if required.
<hr> <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> Reserved.</p>


</body> </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 * 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. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -81,7 +81,9 @@ import java.util.Vector;
public class Java extends Task { public class Java extends Task {


private CommandlineJava cmdl = new CommandlineJava(); private CommandlineJava cmdl = new CommandlineJava();
private Environment env = new Environment();
private boolean fork = false; private boolean fork = false;
private boolean newEnvironment = false;
private File dir = null; private File dir = null;
private File out; private File out;
private PrintStream outStream = null; 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); 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(), log("Running in same VM " + cmdl.getJavaCommand().toString(),
Project.MSG_VERBOSE); Project.MSG_VERBOSE);
try { try {
@@ -268,6 +275,28 @@ public class Java extends Task {
cmdl.setVmversion(value); 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) { protected void handleOutput(String line) {
if (outStream != null) { if (outStream != null) {
outStream.println(line); outStream.println(line);
@@ -340,6 +369,16 @@ public class Java extends Task {
exe.setWorkingDirectory(dir); 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); exe.setCommandline(command);
try { try {
return exe.execute(); return exe.execute();


Loading…
Cancel
Save