diff --git a/src/main/org/apache/tools/ant/Main.java b/src/main/org/apache/tools/ant/Main.java index e8adcf869..b89e00a9e 100644 --- a/src/main/org/apache/tools/ant/Main.java +++ b/src/main/org/apache/tools/ant/Main.java @@ -78,6 +78,9 @@ public class Main { /** File that we are using for configuration */ private static File buildFile = new File("build.xml"); + /** Stream that we are using for logging */ + private static PrintStream out = System.out; + /** The build targets */ private static Vector targets = new Vector(5); @@ -106,7 +109,25 @@ public class Main { msgOutputLevel = Project.MSG_WARN; } else if (arg.equals("-verbose") || arg.equals("-v") || arg.equals("v")) { msgOutputLevel = Project.MSG_VERBOSE; - } else if (arg.equals("-buildfile") || arg.equals("-file") || arg.equals("-f")) { + } else if (arg.equals("-logfile") || arg.equals("-l") || arg.equals("l")) { + try { + File logFile = new File(args[i+1]); + i++; + out = new PrintStream(new FileOutputStream(logFile)); + System.setOut(out); + System.setErr(out); + } catch (IOException ioe) { + String msg = "Cannot write on the specified log file. " + + "Make sure the path exists and you have write permissions."; + System.out.println(msg); + return; + } catch (ArrayIndexOutOfBoundsException aioobe) { + String msg = "You must specify a log file when " + + "using the -log argument"; + System.out.println(msg); + return; + } + } else if (arg.equals("-buildfile") || arg.equals("-file") || arg.equals("-f") || arg.equals("f")) { try { buildFile = new File(args[i+1]); i++; @@ -157,6 +178,8 @@ public class Main { // ok, so if we've made it here, let's run the damn build allready runBuild(); + + return; } /** @@ -172,8 +195,7 @@ public class Main { System.out.println("Buildfile: " + buildFile); } - Project project = new Project(); - project.setOutputLevel(msgOutputLevel); + Project project = new Project(out, msgOutputLevel); // set user-define properties Enumeration e = definedProps.keys(); @@ -234,6 +256,7 @@ public class Main { msg.append(" -help print this message" + lSep); msg.append(" -quiet be extra quiet" + lSep); msg.append(" -verbose be extra verbose" + lSep); + msg.append(" -logfile use given file for log" + lSep); msg.append(" -buildfile use given buildfile" + lSep); msg.append(" -D= use value for given property" + lSep); System.out.println(msg.toString()); diff --git a/src/main/org/apache/tools/ant/Project.java b/src/main/org/apache/tools/ant/Project.java index fe37f2b40..e6354346d 100644 --- a/src/main/org/apache/tools/ant/Project.java +++ b/src/main/org/apache/tools/ant/Project.java @@ -83,14 +83,14 @@ public class Project { private static final String VISITED = "VISITED"; private static String javaVersion; - + public static final String JAVA_1_0 = "1.0"; public static final String JAVA_1_1 = "1.1"; public static final String JAVA_1_2 = "1.2"; public static final String JAVA_1_3 = "1.3"; private String name; - private PrintStream out = System.out; + private PrintStream out; private int msgOutputLevel = MSG_INFO; private Hashtable properties = new Hashtable(); @@ -100,9 +100,15 @@ public class Project { private Hashtable targets = new Hashtable(); private File baseDir; - public Project() { + public Project(PrintStream out, int msgOutputLevel) { + + this.out = out; + this.msgOutputLevel = msgOutputLevel; + detectJavaVersion(); + String defs = "/org/apache/tools/ant/taskdefs/defaults.properties"; + try { Properties props = new Properties(); InputStream in = this.getClass().getResourceAsStream(defs); @@ -120,11 +126,11 @@ public class Project { } } - Properties systemP=System.getProperties(); + Properties systemP = System.getProperties(); Enumeration e=systemP.keys(); - while( e.hasMoreElements() ) { + while (e.hasMoreElements()) { String n=(String) e.nextElement(); - properties.put( n, systemP.get(n)); + properties.put(n, systemP.get(n)); } } catch (IOException ioe) { String msg = "Can't load default task list"; @@ -133,18 +139,14 @@ public class Project { } } - public void setOutput(PrintStream out) { - this.out = out; - } - - public void setOutputLevel(int msgOutputLevel) { - this.msgOutputLevel = msgOutputLevel; + public PrintStream getOutput() { + return this.out; } public int getOutputLevel() { return this.msgOutputLevel; } - + public void log(String msg) { log(msg, MSG_INFO); } @@ -157,13 +159,13 @@ public class Project { public void log(String msg, String tag, int msgLevel) { if (msgLevel <= msgOutputLevel) { - out.println("[" + tag + "]" + msg); + out.println("[" + tag + "] " + msg); } } public void setProperty(String name, String value) { // command line properties take precedence - if( null!= userProperties.get(name)) + if (null != userProperties.get(name)) return; log("Setting project property: " + name + " to " + value, MSG_VERBOSE); @@ -178,7 +180,7 @@ public class Project { } public String getProperty(String name) { - String property = (String)properties.get(name); + String property = (String) properties.get(name); return property; } @@ -209,9 +211,9 @@ public class Project { } // match basedir attribute in xml - public void setBasedir( String baseD ) throws BuildException { + public void setBasedir(String baseD) throws BuildException { try { - setBaseDir(new File( new File(baseD).getCanonicalPath())); + setBaseDir(new File(new File(baseD).getCanonicalPath())); } catch (IOException ioe) { String msg = "Can't set basedir " + baseDir + " due to " + ioe.getMessage(); @@ -226,10 +228,12 @@ public class Project { } public File getBaseDir() { - if(baseDir==null) { + if (baseDir == null) { try { setBasedir("."); - } catch(BuildException ex) {ex.printStackTrace();} + } catch (BuildException ex) { + ex.printStackTrace(); + } } return baseDir; } @@ -259,12 +263,12 @@ public class Project { // swallow as we've hit the max class version that // we have } - + // sanity check if (javaVersion == JAVA_1_0) { throw new BuildException("Ant cannot work on Java 1.0"); } - + log("Detected Java Version: " + javaVersion); } diff --git a/src/main/org/apache/tools/ant/taskdefs/Ant.java b/src/main/org/apache/tools/ant/taskdefs/Ant.java index be11f2e54..acddb5440 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Ant.java +++ b/src/main/org/apache/tools/ant/taskdefs/Ant.java @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 1999 The Apache Software Foundation. All rights + * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -9,7 +9,7 @@ * are met: * * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in @@ -17,15 +17,15 @@ * distribution. * * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the + * any, must include the following acknowlegement: + * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written + * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" @@ -59,7 +59,7 @@ import java.io.*; import java.util.*; /** - * Call Ant in a sub-project + * Call Ant in a sub-project * * @author costin@dnt.ro */ @@ -68,36 +68,34 @@ public class Ant extends Task { private String dir = null; private String antFile = null; private String target = null; - + /** * Do the execution. */ public void execute() throws BuildException { - Project p1=new Project(); - p1.setOutputLevel( project.getOutputLevel() ); - - // set user-define properties - Hashtable prop1=project.getProperties(); + Project p1 = new Project(project.getOutput(), project.getOutputLevel()); + + // set user-define properties + Hashtable prop1 = project.getProperties(); Enumeration e = prop1.keys(); while (e.hasMoreElements()) { - String arg = (String)e.nextElement(); - String value = (String)prop1.get(arg); + String arg = (String) e.nextElement(); + String value = (String) prop1.get(arg); p1.setUserProperty(arg, value); } - - p1.setBasedir( dir ); - p1.setUserProperty( "basedir" , dir); - if(antFile==null) antFile= dir + "/build.xml"; - ProjectHelper.configureProject(p1, new File(antFile)); - if (target == null) { - target = p1.getDefaultTarget(); - } + p1.setBasedir(dir); + p1.setUserProperty("basedir" , dir); + if (antFile == null) antFile = dir + "/build.xml"; + ProjectHelper.configureProject(p1, new File(antFile)); + + if (target == null) { + target = p1.getDefaultTarget(); + } - p1.executeTarget( target ); - + p1.executeTarget(target); } - + public void setDir(String d) { this.dir = d; } @@ -109,6 +107,4 @@ public class Ant extends Task { public void setTarget(String s) { this.target = s; } - - }