@@ -345,73 +345,15 @@ public class Main implements AntMain {
}
} else if (arg.equals("-buildfile") || arg.equals("-file")
|| arg.equals("-f")) {
try {
buildFile = new File(args[i + 1].replace('/', File.separatorChar));
i++;
} catch (ArrayIndexOutOfBoundsException aioobe) {
String msg = "You must specify a buildfile when "
+ "using the -buildfile argument";
throw new BuildException(msg);
}
i = handleArgBuildFile(args, i);
} else if (arg.equals("-listener")) {
try {
listeners.addElement(args[i + 1]);
i++;
} catch (ArrayIndexOutOfBoundsException aioobe) {
String msg = "You must specify a classname when "
+ "using the -listener argument";
throw new BuildException(msg);
}
i = handleArgListener(args, i);
} else if (arg.startsWith("-D")) {
/* Interestingly enough, we get to here when a user
* uses -Dname=value. However, in some cases, the OS
* goes ahead and parses this out to args
* {"-Dname", "value"}
* so instead of parsing on "=", we just make the "-D"
* characters go away and skip one argument forward.
*
* I don't know how to predict when the JDK is going
* to help or not, so we simply look for the equals sign.
*/
String name = arg.substring(2, arg.length());
String value = null;
int posEq = name.indexOf("=");
if (posEq > 0) {
value = name.substring(posEq + 1);
name = name.substring(0, posEq);
} else if (i < args.length - 1) {
value = args[++i];
} else {
throw new BuildException("Missing value for property "
+ name);
}
definedProps.put(name, value);
i = handleArgDefine(args, i);
} else if (arg.equals("-logger")) {
if (loggerClassname != null) {
throw new BuildException("Only one logger class may "
+ " be specified.");
}
try {
loggerClassname = args[++i];
} catch (ArrayIndexOutOfBoundsException aioobe) {
throw new BuildException("You must specify a classname when"
+ " using the -logger argument");
}
i = handleArgLogger(args, i);
} else if (arg.equals("-inputhandler")) {
if (inputHandlerClassname != null) {
throw new BuildException("Only one input handler class may "
+ "be specified.");
}
try {
inputHandlerClassname = args[++i];
} catch (ArrayIndexOutOfBoundsException aioobe) {
throw new BuildException("You must specify a classname when"
+ " using the -inputhandler"
+ " argument");
}
i = handleArgInputHandler(args, i);
} else if (arg.equals("-emacs") || arg.equals("-e")) {
emacsMode = true;
} else if (arg.equals("-projecthelp") || arg.equals("-p")) {
@@ -425,33 +367,11 @@ public class Main implements AntMain {
searchForThis = DEFAULT_BUILD_FILENAME;
}
} else if (arg.startsWith("-propertyfile")) {
try {
propertyFiles.addElement(args[i + 1]);
i++;
} catch (ArrayIndexOutOfBoundsException aioobe) {
String msg = "You must specify a property filename when "
+ "using the -propertyfile argument";
throw new BuildException(msg);
}
i = handleArgPropertyFile(args, i);
} else if (arg.equals("-k") || arg.equals("-keep-going")) {
keepGoingMode = true;
} else if (arg.equals("-nice")) {
try {
threadPriority = Integer.decode(args[i + 1]);
} catch (ArrayIndexOutOfBoundsException aioobe) {
throw new BuildException(
"You must supply a niceness value (1-10)"
+ " after the -nice option");
} catch (NumberFormatException e) {
throw new BuildException("Unrecognized niceness value: "
+ args[i + 1]);
}
i++;
if (threadPriority.intValue() < Thread.MIN_PRIORITY
|| threadPriority.intValue() > Thread.MAX_PRIORITY) {
throw new BuildException(
"Niceness value is out of the range 1-10");
}
i = handleArgNice(args, i);
} else if (LAUNCH_COMMANDS.contains(arg)) {
//catch script/ant mismatch with a meaningful message
//we could ignore it, but there are likely to be other
@@ -501,6 +421,149 @@ public class Main implements AntMain {
}
// Load the property files specified by -propertyfile
loadPropertyFiles();
if (msgOutputLevel >= Project.MSG_INFO) {
System.out.println("Buildfile: " + buildFile);
}
if (logTo != null) {
out = logTo;
err = logTo;
System.setOut(out);
System.setErr(err);
}
readyToRun = true;
}
// --------------------------------------------------------
// Methods for handling the command line arguments
// --------------------------------------------------------
/** Handle the -buildfile, -file, -f argument */
private int handleArgBuildFile(String[] args, int pos) {
try {
buildFile = new File(
args[++pos].replace('/', File.separatorChar));
} catch (ArrayIndexOutOfBoundsException aioobe) {
throw new BuildException(
"You must specify a buildfile when using the -buildfile argument");
}
return pos;
}
/** Handle -listener argument */
private int handleArgListener(String[] args, int pos) {
try {
listeners.addElement(args[pos + 1]);
pos++;
} catch (ArrayIndexOutOfBoundsException aioobe) {
String msg = "You must specify a classname when "
+ "using the -listener argument";
throw new BuildException(msg);
}
return pos;
}
/** Handler -D argument */
private int handleArgDefine(String[] args, int argPos) {
/* Interestingly enough, we get to here when a user
* uses -Dname=value. However, in some cases, the OS
* goes ahead and parses this out to args
* {"-Dname", "value"}
* so instead of parsing on "=", we just make the "-D"
* characters go away and skip one argument forward.
*
* I don't know how to predict when the JDK is going
* to help or not, so we simply look for the equals sign.
*/
String arg = args[argPos];
String name = arg.substring(2, arg.length());
String value = null;
int posEq = name.indexOf("=");
if (posEq > 0) {
value = name.substring(posEq + 1);
name = name.substring(0, posEq);
} else if (argPos < args.length - 1) {
value = args[++argPos];
} else {
throw new BuildException("Missing value for property "
+ name);
}
definedProps.put(name, value);
return argPos;
}
/** Handle the -logger argument. */
private int handleArgLogger(String[] args, int pos) {
if (loggerClassname != null) {
throw new BuildException(
"Only one logger class may be specified.");
}
try {
loggerClassname = args[++pos];
} catch (ArrayIndexOutOfBoundsException aioobe) {
throw new BuildException(
"You must specify a classname when using the -logger argument");
}
return pos;
}
/** Handle the -inputhandler argument. */
private int handleArgInputHandler(String[] args, int pos) {
if (inputHandlerClassname != null) {
throw new BuildException("Only one input handler class may "
+ "be specified.");
}
try {
inputHandlerClassname = args[++pos];
} catch (ArrayIndexOutOfBoundsException aioobe) {
throw new BuildException("You must specify a classname when"
+ " using the -inputhandler"
+ " argument");
}
return pos;
}
/** Handle the -propertyfile argument. */
private int handleArgPropertyFile(String[] args, int pos) {
try {
propertyFiles.addElement(args[++pos]);
} catch (ArrayIndexOutOfBoundsException aioobe) {
String msg = "You must specify a property filename when "
+ "using the -propertyfile argument";
throw new BuildException(msg);
}
return pos;
}
/** Handle the -nice argument. */
private int handleArgNice(String[] args, int pos) {
try {
threadPriority = Integer.decode(args[++pos]);
} catch (ArrayIndexOutOfBoundsException aioobe) {
throw new BuildException(
"You must supply a niceness value (1-10)"
+ " after the -nice option");
} catch (NumberFormatException e) {
throw new BuildException("Unrecognized niceness value: "
+ args[pos]);
}
if (threadPriority.intValue() < Thread.MIN_PRIORITY
|| threadPriority.intValue() > Thread.MAX_PRIORITY) {
throw new BuildException(
"Niceness value is out of the range 1-10");
}
return pos;
}
// --------------------------------------------------------
// other methods
// --------------------------------------------------------
/** Load the property files specified by -propertyfile */
private void loadPropertyFiles() {
for (int propertyFileIndex = 0;
propertyFileIndex < propertyFiles.size();
propertyFileIndex++) {
@@ -513,7 +576,7 @@ public class Main implements AntMain {
props.load(fis);
} catch (IOException e) {
System.out.println("Could not load property file "
+ filename + ": " + e.getMessage());
+ filename + ": " + e.getMessage());
} finally {
FileUtils.close(fis);
}
@@ -527,18 +590,6 @@ public class Main implements AntMain {
}
}
}
if (msgOutputLevel >= Project.MSG_INFO) {
System.out.println("Buildfile: " + buildFile);
}
if (logTo != null) {
out = logTo;
err = logTo;
System.setOut(out);
System.setErr(err);
}
readyToRun = true;
}
/**