Browse Source

Ant will now scan for build.xml in the parent directory (directories)

as well.

Added -debug and Project.MSG_DEBUG to make -verbose less verbose. Many
messages really rather belong into a DEBUG category.

Submitted by:	Jason Dillon <jason@planet57.com>


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268009 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 25 years ago
parent
commit
9490ce8f93
4 changed files with 110 additions and 15 deletions
  1. +6
    -0
      WHATSNEW
  2. +9
    -5
      docs/index.html
  3. +86
    -2
      src/main/org/apache/tools/ant/Main.java
  4. +9
    -8
      src/main/org/apache/tools/ant/Project.java

+ 6
- 0
WHATSNEW View File

@@ -79,6 +79,12 @@ on log output.

* project specific help can now be obtained with the -projecthelp option.

* Added a -debug option to make -verbose less verbose (and more useful)

* Ant will now search for a file named build.xml in the parent directory
and above (towards the root of the filesystem) if you didn't specify
-buildfile and there is no build.xml in the current directory.

Fixed bugs:
-----------



+ 9
- 5
docs/index.html View File

@@ -25,7 +25,7 @@
<li>Dave Walend (<a href="mailto:dwalend@cs.tufts.edu">dwalend@cs.tufts.edu</a>)</li>
</ul>

<p>Version 1.2 - 2000/09/15</p>
<p>Version 1.2 - 2000/09/19</p>

<hr>
<h2>Table of Contents</h2>
@@ -166,10 +166,13 @@ shell script necessary to run execs on Unix.</p>
<h2><a name="running">Running Ant</a></h2>
<p>Running Ant is simple, when you installed it as described in the previous
section. Just type <code>ant</code>.</p>
<p>When nothing is specified, Ant looks for a <code>build.xml</code> file in the
current directory. When found, it uses that file as a buildfile. To make Ant use
another buildfile, use the commandline option <i>-buildfile &lt;file&gt;</i>,
where <i>&lt;file&gt;</i> is the buildfile you want to use.</p>
<p>When nothing is specified, Ant looks for a <code>build.xml</code>
file in the current directory. When found, it uses that file as a
buildfile, otherwise it searches in the parent directory and so on
until the root of the filesystem has been reached. To make Ant use
another buildfile, use the commandline option <i>-buildfile
&lt;file&gt;</i>, where <i>&lt;file&gt;</i> is the buildfile you want
to use.</p>
<p>You can also set properties which override properties specified in the
buildfile (see the <a href="#property">property task</a>).
This can be done with the <i>-D&lt;property&gt;=&lt;value&gt;</i>
@@ -192,6 +195,7 @@ Options:
-version print the version information and exit
-quiet be extra quiet
-verbose be extra verbose
-debug print debugging information
-emacs produce logging information without adornments
-logfile &lt;file&gt; use given file for log
-logger &lt;classname&gt; the class which is to perform logging


+ 86
- 2
src/main/org/apache/tools/ant/Main.java View File

@@ -72,11 +72,14 @@ import java.util.*;

public class Main {

/** The default build file name */
public static final String DEFAULT_BUILD_FILENAME = "build.xml";

/** Our current message output status. Follows Project.MSG_XXX */
private int msgOutputLevel = Project.MSG_INFO;

/** File that we are using for configuration */
private File buildFile = new File("build.xml");
private File buildFile; /** null */

/** Stream that we are using for logging */
private PrintStream out = System.out;
@@ -128,6 +131,7 @@ public class Main {
System.exit(0);
}
catch(Throwable exc) {
System.err.println(exc.getMessage());
System.exit(1);
}
}
@@ -150,6 +154,9 @@ public class Main {
} else if (arg.equals("-verbose") || arg.equals("-v")) {
printVersion();
msgOutputLevel = Project.MSG_VERBOSE;
} else if (arg.equals("-debug")) {
printVersion();
msgOutputLevel = Project.MSG_DEBUG;
} else if (arg.equals("-logfile") || arg.equals("-l")) {
try {
File logFile = new File(args[i+1]);
@@ -236,8 +243,13 @@ public class Main {

}

// make sure buildfile exists
// if buildFile was not specified on the command line,
// then search for it
if (buildFile == null) {
buildFile = findBuildFile(DEFAULT_BUILD_FILENAME);
}

// make sure buildfile exists
if (!buildFile.exists()) {
System.out.println("Buildfile: " + buildFile + " does not exist!");
throw new BuildException("Build failed");
@@ -254,6 +266,77 @@ public class Main {
readyToRun = true;
}

/**
* Helper to get the parent file for a given filename.
*
* <P>Added to simulate File.getParentFile() from JDK 1.2.
*
* @param filename File name
* @return Parent file or null if none
*/
private File getParentFile(String filename) {
return getParentFile(new File(filename));
}

/**
* Helper to get the parent file for a given file.
*
* <P>Added to simulate File.getParentFile() from JDK 1.2.
*
* @param file File
* @return Parent file or null if none
*/
private File getParentFile(File file) {
String filename = file.getAbsolutePath();
file = new File(filename);
filename = file.getParent();

if (filename != null && msgOutputLevel >= Project.MSG_VERBOSE) {
System.out.println("Searching in "+filename);
}

return (filename == null) ? null : new File(filename);
}

/**
* Search parent directories for the build file.
*
* <P>Takes the given target as a suffix to append to each
* parent directory in seach of a build file. Once the
* root of the file-system has been reached an exception
* is thrown.
*
* @param suffix Suffix filename to look for in parents.
* @return A handle to the build file
*
* @exception BuildException Failed to locate a build file
*/
private File findBuildFile(String suffix) throws BuildException {
if (msgOutputLevel >= Project.MSG_INFO) {
System.out.println("Searching for " + suffix + " ...");
}

File parent = getParentFile(suffix);
File file = new File(parent, suffix);
// check if the target file exists in the current directory
while (!file.exists()) {
// change to parent directory
parent = getParentFile(parent);
// if parent is null, then we are at the root of the fs,
// complain that we can't find the build file.
if (parent == null) {
throw new BuildException("Could not locate a build file!");
}
// refresh our file handle
file = new File(parent, suffix);
}
return file;
}

/**
* Executes the build.
*/
@@ -390,6 +473,7 @@ public class Main {
msg.append(" -version print the version information and exit" + lSep);
msg.append(" -quiet be extra quiet" + lSep);
msg.append(" -verbose be extra verbose" + lSep);
msg.append(" -debug print debugging information" + lSep);
msg.append(" -emacs produce logging information without adornments" + lSep);
msg.append(" -logfile <file> use given file for log" + lSep);
msg.append(" -logger <classname> the class which is to perform logging" + lSep);


+ 9
- 8
src/main/org/apache/tools/ant/Project.java View File

@@ -76,6 +76,7 @@ public class Project {
public static final int MSG_WARN = 1;
public static final int MSG_INFO = 2;
public static final int MSG_VERBOSE = 3;
public static final int MSG_DEBUG = 4;

// private set of constants to represent the state
// of a DFS of the Target dependencies
@@ -238,13 +239,13 @@ public class Project {
if (null != userProperties.get(name))
return;
log("Setting project property: " + name + " -> " +
value, MSG_VERBOSE);
value, MSG_DEBUG);
properties.put(name, value);
}

public void setUserProperty(String name, String value) {
log("Setting ro project property: " + name + " -> " +
value, MSG_VERBOSE);
value, MSG_DEBUG);
userProperties.put(name, value);
properties.put(name, value);
}
@@ -294,7 +295,7 @@ public class Project {
public void addFilter(String token, String value) {
if (token == null) return;
log("Setting token to filter: " + token + " -> "
+ value, MSG_VERBOSE);
+ value, MSG_DEBUG);
this.filters.put(token, value);
}

@@ -350,7 +351,7 @@ public class Project {

public void addTaskDefinition(String taskName, Class taskClass) {
String msg = " +User task: " + taskName + " " + taskClass.getName();
log(msg, MSG_VERBOSE);
log(msg, MSG_DEBUG);
taskClassDefinitions.put(taskName, taskClass);
}

@@ -360,7 +361,7 @@ public class Project {

public void addDataTypeDefinition(String typeName, Class typeClass) {
String msg = " +User datatype: " + typeName + " " + typeClass.getName();
log(msg, MSG_VERBOSE);
log(msg, MSG_DEBUG);
dataClassDefinitions.put(typeName, typeClass);
}

@@ -416,7 +417,7 @@ public class Project {
*/
public void addOrReplaceTarget(String targetName, Target target) {
String msg = " +Target: " + targetName;
log(msg, MSG_VERBOSE);
log(msg, MSG_DEBUG);
target.setProject(this);
targets.put(targetName, target);
}
@@ -449,7 +450,7 @@ public class Project {
task.setTaskName(taskType);

String msg = " +Task: " + taskType;
log (msg, MSG_VERBOSE);
log (msg, MSG_DEBUG);
return task;
} catch (Exception e) {
String msg = "Could not create task of type: "
@@ -484,7 +485,7 @@ public class Project {
o = ctor.newInstance(new Object[] {this});
}
String msg = " +DataType: " + typeName;
log (msg, MSG_VERBOSE);
log (msg, MSG_DEBUG);
return o;
} catch (java.lang.reflect.InvocationTargetException ite) {
Throwable t = ite.getTargetException();


Loading…
Cancel
Save