@@ -161,13 +161,14 @@ public class Main {
try {
m = new Main(args);
} catch(Throwable exc) {
} catch (Throwable exc) {
printMessage(exc);
System.exit(1);
}
if (additionalUserProperties != null) {
for (Enumeration e = additionalUserProperties.keys(); e.hasMoreElements(); ) {
for (Enumeration e = additionalUserProperties.keys();
e.hasMoreElements(); ) {
String key = (String) e.nextElement();
String property = additionalUserProperties.getProperty(key);
m.definedProps.put(key, property);
@@ -182,7 +183,7 @@ public class Main {
printMessage(be);
}
System.exit(1);
} catch(Throwable exc) {
} catch (Throwable exc) {
exc.printStackTrace();
printMessage(exc);
System.exit(1);
@@ -238,15 +239,16 @@ public class Main {
msgOutputLevel = Project.MSG_DEBUG;
} else if (arg.equals("-logfile") || arg.equals("-l")) {
try {
File logFile = new File(args[i+1]);
File logFile = new File(args[i + 1]);
i++;
out = new PrintStream(new FileOutputStream(logFile));
err = out;
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.";
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) {
@@ -255,9 +257,10 @@ public class Main {
System.out.println(msg);
return;
}
} else if (arg.equals("-buildfile") || arg.equals("-file") || arg.equals("-f")) {
} else if (arg.equals("-buildfile") || arg.equals("-file")
|| arg.equals("-f")) {
try {
buildFile = new File(args[i+1]);
buildFile = new File(args[i + 1]);
i++;
} catch (ArrayIndexOutOfBoundsException aioobe) {
String msg = "You must specify a buildfile when " +
@@ -267,7 +270,7 @@ public class Main {
}
} else if (arg.equals("-listener")) {
try {
listeners.addElement(args[i+1]);
listeners.addElement(args[i + 1]);
i++;
} catch (ArrayIndexOutOfBoundsException aioobe) {
String msg = "You must specify a classname when " +
@@ -292,16 +295,17 @@ public class Main {
String value = null;
int posEq = name.indexOf("=");
if (posEq > 0) {
value = name.substring(posEq+1);
value = name.substring(posEq + 1);
name = name.substring(0, posEq);
} else if (i < args.length-1) {
} else if (i < args.length - 1) {
value = args[++i];
}
definedProps.put(name, value);
} else if (arg.equals("-logger")) {
if (loggerClassname != null) {
System.out.println("Only one logger class may be specified.");
System.out.println("Only one logger class may "
+ " be specified.");
return;
}
try {
@@ -319,14 +323,14 @@ public class Main {
projectHelp = true;
} else if (arg.equals("-find")) {
// eat up next arg if present, default to build.xml
if (i < args.length-1) {
if (i < args.length - 1) {
searchForThis = args[++i];
} else {
searchForThis = DEFAULT_BUILD_FILENAME;
}
} else if (arg.startsWith("-propertyfile")) {
try {
propertyFiles.addElement(args[i+1]);
propertyFiles.addElement(args[i + 1]);
i++;
} catch (ArrayIndexOutOfBoundsException aioobe) {
String msg = "You must specify a property filename when " +
@@ -372,10 +376,11 @@ public class Main {
}
// Load the property files specified by -propertyfile
for (int propertyFileIndex=0;
for (int propertyFileIndex = 0;
propertyFileIndex < propertyFiles.size();
propertyFileIndex++) {
String filename = (String) propertyFiles.elementAt(propertyFileIndex);
String filename
= (String) propertyFiles.elementAt(propertyFileIndex);
Properties props = new Properties();
FileInputStream fis = null;
try {
@@ -421,7 +426,7 @@ public class Main {
filename = file.getParent();
if (filename != null && msgOutputLevel >= Project.MSG_VERBOSE) {
System.out.println("Searching in "+filename);
System.out.println("Searching in " + filename);
}
return (filename == null) ? null : new File(filename);
@@ -444,7 +449,8 @@ public class Main {
*
* @exception BuildException if no build file is found
*/
private File findBuildFile(String start, String suffix) throws BuildException {
private File findBuildFile(String start, String suffix)
throws BuildException {
if (msgOutputLevel >= Project.MSG_INFO) {
System.out.println("Searching for " + suffix + " ...");
}
@@ -534,12 +540,14 @@ public class Main {
project.setUserProperty(arg, value);
}
project.setUserProperty("ant.file" , buildFile.getAbsolutePath() );
project.setUserProperty("ant.file",
buildFile.getAbsolutePath() );
// first use the ProjectHelper to create the project object
// from the given build file.
String noParserMessage =
"No JAXP compliant XML parser found. Please visit http://xml.apache.org for a suitable parser";
String noParserMessage = "No JAXP compliant XML parser found. "
+ "Please visit http://xml.apache.org "
+ "for a suitable parser";
try {
Class.forName("javax.xml.parsers.SAXParserFactory");
ProjectHelper.configureProject(project, buildFile);
@@ -575,11 +583,11 @@ public class Main {
System.setErr(err);
}
}
catch(RuntimeException exc) {
catch (RuntimeException exc) {
error = exc;
throw exc;
}
catch(Error err) {
catch (Error err) {
error = err;
throw err;
}
@@ -609,18 +617,22 @@ public class Main {
(BuildListener) Class.forName(className).newInstance();
project.addBuildListener(listener);
}
catch(Throwable exc) {
throw new BuildException("Unable to instantiate listener " + className, exc);
catch (Throwable exc) {
throw new BuildException("Unable to instantiate listener "
+ className, exc);
}
}
}
// XXX: (Jon Skeet) Any reason for writing a message and then using a bare
// RuntimeException rather than just using a BuildException here? Is it
// in case the message could end up being written to no loggers (as the loggers
// could have failed to be created due to this failure)?
// in case the message could end up being written to no loggers (as the
// loggers could have failed to be created due to this failure)?
/**
* Creates the default build logger for sending build events to the ant log.
* Creates the default build logger for sending build events to the ant
* log.
*
* @return the logger instance for this build.
*/
private BuildLogger createLogger() {
BuildLogger logger = null;
@@ -629,13 +641,14 @@ public class Main {
logger = (BuildLogger)(Class.forName(loggerClassname).newInstance());
}
catch (ClassCastException e) {
System.err.println("The specified logger class " + loggerClassname +
" does not implement the BuildLogger interface");
System.err.println("The specified logger class "
+ loggerClassname
+ " does not implement the BuildLogger interface");
throw new RuntimeException();
}
catch (Exception e) {
System.err.println("Unable to instantiate specified logger class " +
loggerClassname + " : " + e.getClass().getName());
System.err.println("Unable to instantiate specified logger "
+ "class " + loggerClassname + " : " + e.getClass().getName());
throw new RuntimeException();
}
}
@@ -783,13 +796,14 @@ public class Main {
printTargets(topNames, topDescriptions, "Main targets:", maxLength);
if( printSubTargets ) {
if ( printSubTargets) {
printTargets(subNames, null, "Subtargets:", 0);
}
String defaultTarget = project.getDefaultTarget();
if (defaultTarget != null && !"".equals(defaultTarget)) { // shouldn't need to check but...
System.out.println( "Default target: " + defaultTarget );
if (defaultTarget != null && !"".equals(defaultTarget)) {
// shouldn't need to check but...
System.out.println( "Default target: " + defaultTarget);
}
}
@@ -805,7 +819,7 @@ public class Main {
*/
private static int findTargetPosition(Vector names, String name) {
int res = names.size();
for (int i=0; i<names.size() && res == names.size(); i++) {
for (int i = 0; i < names.size() && res == names.size(); i++) {
if (name.compareTo((String)names.elementAt(i)) < 0) {
res = i;
}
@@ -816,18 +830,24 @@ public class Main {
/**
* Writes a formatted list of target names to <code>System.out</code>
* with an optional description
*
* @param names the names to be printed.
* @param descriptions the associated target descriptions.
* @param heading the heading for the print.
* @param maxlen the maximum length of the names of the targets.
*/
private static void printTargets(Vector names, Vector descriptions, String heading, int maxlen) {
private static void printTargets(Vector names, Vector descriptions,
String heading, int maxlen) {
// now, start printing the targets and their descriptions
String lSep = System.getProperty("line.separator");
// got a bit annoyed that I couldn't find a pad function
String spaces = " ";
while (spaces.length()<maxlen) {
while (spaces.length() < maxlen) {
spaces += spaces;
}
StringBuffer msg = new StringBuffer();
msg.append(heading + lSep + lSep);
for (int i=0; i<names.size(); i++) {
for (int i = 0; i < names.size(); i++) {
msg.append(" ");
msg.append(names.elementAt(i));
if (descriptions != null) {