diff --git a/build.bat b/build.bat index 4025d28dc..d39dcea80 100755 --- a/build.bat +++ b/build.bat @@ -3,7 +3,6 @@ REM Copyright (c) 2000-2002 The Apache Software Foundation. All rights REM reserved. -set OLDCLASSPATH=%CLASSPATH% set REAL_ANT_HOME=%ANT_HOME% set ANT_HOME=bootstrap if exist bootstrap\lib\ant.jar if exist bootstrap\bin\ant.bat if exist bootstrap\bin\lcp.bat if exist bootstrap\bin\antRun.bat goto runAnt @@ -13,21 +12,15 @@ echo Bootstrap FAILED goto cleanup :runAnt -set LOCALCLASSPATH= -for %%i in (lib\optional\*.jar) do call bootstrap\bin\lcp.bat %%i -set CLASSPATH=lib\optional\xalanj1compat.jar;%LOCALCLASSPATH%;%CLASSPATH% -set LOCALCLASSPATH= - if not "%REAL_ANT_HOME%" == "" goto install_ant -call bootstrap\bin\ant.bat -emacs %1 %2 %3 %4 %5 %6 %7 %8 %9 +call bootstrap\bin\ant.bat -lib lib/optional %1 %2 %3 %4 %5 %6 %7 %8 %9 goto cleanup :install_ant -call bootstrap\bin\ant.bat -emacs -Dant.install="%REAL_ANT_HOME%" %1 %2 %3 %4 %5 %6 %7 %8 %9 +call bootstrap\bin\ant.bat -lib lib/optional -Dant.install="%REAL_ANT_HOME%" %1 %2 %3 %4 %5 %6 %7 %8 %9 rem clean up :cleanup set ANT_HOME=%REAL_ANT_HOME% set REAL_ANT_HOME= -set CLASSPATH=%OLDCLASSPATH% -set OLDCLASSPATH= + diff --git a/build.sh b/build.sh index 142a49f72..328123542 100755 --- a/build.sh +++ b/build.sh @@ -28,31 +28,6 @@ if test ! -f bootstrap/lib/ant.jar -o ! -x bootstrap/bin/ant -o ! -x bootstrap/ exit fi -LOCALCLASSPATH= -# add in the dependency .jar files -DIRLIBS=lib/optional/*.jar -for i in ${DIRLIBS} -do - if [ "$i" != "${DIRLIBS}" ] ; then - LOCALCLASSPATH=$LOCALCLASSPATH:"$i" - fi -done - -# make sure the classpath is in unix format -if $cygwin ; then - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -CLASSPATH=$LOCALCLASSPATH:$CLASSPATH - -# switch back to Windows format -if $cygwin ; then - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -export CLASSPATH - - if [ "$REALANTHOME" != "" ] ; then if $cygwin; then REALANTHOME=`cygpath --path --windows "$REALANTHOME"` @@ -62,5 +37,5 @@ else ANT_INSTALL="-emacs" fi -bootstrap/bin/ant "$ANT_INSTALL" $* +bootstrap/bin/ant -lib lib/optional "$ANT_INSTALL" $* diff --git a/src/main/org/apache/tools/ant/launch/Launcher.java b/src/main/org/apache/tools/ant/launch/Launcher.java index fb83a72b2..af8bf1dcf 100644 --- a/src/main/org/apache/tools/ant/launch/Launcher.java +++ b/src/main/org/apache/tools/ant/launch/Launcher.java @@ -58,6 +58,10 @@ import java.net.URLClassLoader; import java.net.MalformedURLException; import java.io.File; import java.util.StringTokenizer; +import java.util.List; +import java.util.ArrayList; +import java.util.Iterator; + /** * This is a launcher for Ant. @@ -118,43 +122,48 @@ public class Launcher { throw new IllegalStateException("Ant home is set incorrectly or " + "ant could not be located"); } - String libPath = ""; - String[] newargs = null; - int argcount = -1; - for (argcount = 0; argcount < args.length -1; argcount++) { - if (args[argcount].equals("-lib")) { - libPath = args[argcount + 1]; - break; + + List libPaths = new ArrayList(); + List argList = new ArrayList(); + String[] newArgs; + + for (int i = 0; i < args.length; ++i) { + if (args[i].equals("-lib")) { + if (i == args.length - 1) { + throw new IllegalStateException("The -lib argument must " + + "be followed by a library location"); + } + libPaths.add(args[++i]); + } else { + argList.add(args[i]); } } - if (args.length > 0 && args[args.length -1].equals("-lib")) { - // if the last argument is -lib - // remove it from the arguments passed to Launcher - // - newargs = new String[args.length - 1]; - System.arraycopy(args, 0, newargs, 0, args.length -1); - } else if (libPath.equals("")) { - newargs = new String[args.length]; - System.arraycopy(args, 0, newargs, 0, args.length); - } else { - newargs = new String[args.length - 2]; - // copy the beginning of the args array - if (argcount > 0 ) { - System.arraycopy(args, 0, newargs, 0 ,argcount); - } - // copy the end of the args array - if ((argcount + 2 < args.length) && argcount > 0) { - System.arraycopy(args, argcount + 2, newargs, argcount, args.length - (argcount + 2)); - } + + if (libPaths.size() == 0) { + newArgs = args; + } else { + newArgs = (String[]) argList.toArray(new String[0]); } - StringTokenizer myTokenizer = new StringTokenizer(libPath, System.getProperty("path.separator")); - URL[] classPathJars = new URL[myTokenizer.countTokens()]; - int classPathJarCount = 0; - while (myTokenizer.hasMoreElements()) { - String token = myTokenizer.nextToken(); - classPathJars[classPathJarCount++] = new File(token).toURL(); + + List libPathURLs = new ArrayList(); + for (Iterator i = libPaths.iterator(); i.hasNext();) { + String libPath = (String) i.next(); + StringTokenizer myTokenizer + = new StringTokenizer(libPath, System.getProperty("path.separator")); + while (myTokenizer.hasMoreElements()) { + File element = new File(myTokenizer.nextToken()); + if (element.isDirectory()) { + // add any jars in the directory + URL[] dirURLs = Locator.getLocationURLs(element); + for (int j = 0; j < dirURLs.length; ++j) { + libPathURLs.add(dirURLs[j]); + } + } + libPathURLs.add(element.toURL()); + } } + URL[] libJars = (URL[])libPathURLs.toArray(new URL[0]); // Now try and find JAVA_HOME File toolsJar = Locator.getToolsJar(); @@ -166,14 +175,14 @@ public class Launcher { URL[] userJars = Locator.getLocationURLs(userLibDir); - int numJars = classPathJars.length + userJars.length + systemJars.length; + int numJars = libJars.length + userJars.length + systemJars.length; if (toolsJar != null) { numJars++; } URL[] jars = new URL[numJars]; - System.arraycopy(classPathJars, 0, jars, 0, classPathJars.length); - System.arraycopy(userJars, 0, jars, classPathJars.length, userJars.length); - System.arraycopy(systemJars, 0, jars, userJars.length + classPathJars.length, + System.arraycopy(libJars, 0, jars, 0, libJars.length); + System.arraycopy(userJars, 0, jars, libJars.length, userJars.length); + System.arraycopy(systemJars, 0, jars, userJars.length + libJars.length, systemJars.length); if (toolsJar != null) { @@ -184,6 +193,10 @@ public class Launcher { // now update the class.path property StringBuffer baseClassPath = new StringBuffer(System.getProperty("java.class.path")); + if (baseClassPath.charAt(baseClassPath.length() - 1) + == File.pathSeparatorChar) { + baseClassPath.setLength(baseClassPath.length() - 1); + } for (int i = 0; i < jars.length; ++i) { baseClassPath.append(File.pathSeparatorChar); @@ -197,7 +210,7 @@ public class Launcher { try { Class mainClass = loader.loadClass(MAIN_CLASS); AntMain main = (AntMain) mainClass.newInstance(); - main.startAnt(newargs, null, null); + main.startAnt(newArgs, null, null); } catch (Throwable t) { t.printStackTrace(); } diff --git a/src/script/ant b/src/script/ant index 794523d9f..f32a356b2 100644 --- a/src/script/ant +++ b/src/script/ant @@ -71,8 +71,6 @@ if $cygwin ; then ANT_HOME=`cygpath --unix "$ANT_HOME"` [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` fi # set ANT_LIB location @@ -145,21 +143,20 @@ fi if $cygwin; then ANT_HOME=`cygpath --windows "$ANT_HOME"` JAVA_HOME=`cygpath --windows "$JAVA_HOME"` - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` LOCALCLASSPATH=`cygpath --path --windows "$LOCALCLASSPATH"` CYGHOME=`cygpath --windows "$HOME"` fi if [ -n "$CYGHOME" ]; then if [ -n "$JIKESPATH" ]; then - exec "$JAVACMD" $ANT_OPTS -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" -Djikes.class.path="$JIKESPATH" -Dcygwin.user.home="$CYGHOME" org.apache.tools.ant.launch.Launcher $ANT_ARGS "$@" -lib "$CLASSPATH" + exec "$JAVACMD" $ANT_OPTS -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" -Djikes.class.path="$JIKESPATH" -Dcygwin.user.home="$CYGHOME" org.apache.tools.ant.launch.Launcher $ANT_ARGS -lib "$CLASSPATH" "$@" else - exec "$JAVACMD" $ANT_OPTS -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" -Dcygwin.user.home="$CYGHOME" org.apache.tools.ant.launch.Launcher $ANT_ARGS "$@" -lib "$CLASSPATH" + exec "$JAVACMD" $ANT_OPTS -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" -Dcygwin.user.home="$CYGHOME" org.apache.tools.ant.launch.Launcher $ANT_ARGS -lib "$CLASSPATH" "$@" fi else if [ -n "$JIKESPATH" ]; then - exec "$JAVACMD" $ANT_OPTS -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" -Djikes.class.path="$JIKESPATH" org.apache.tools.ant.launch.Launcher $ANT_ARGS "$@" -lib "$CLASSPATH" + exec "$JAVACMD" $ANT_OPTS -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" -Djikes.class.path="$JIKESPATH" org.apache.tools.ant.launch.Launcher $ANT_ARGS -lib "$CLASSPATH" "$@" else - exec "$JAVACMD" $ANT_OPTS -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" org.apache.tools.ant.launch.Launcher $ANT_ARGS "$@" -lib "$CLASSPATH" + exec "$JAVACMD" $ANT_OPTS -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" org.apache.tools.ant.launch.Launcher $ANT_ARGS -lib "$CLASSPATH" "$@" fi fi diff --git a/src/script/ant.bat b/src/script/ant.bat index 8660f9f02..aaa8232b1 100755 --- a/src/script/ant.bat +++ b/src/script/ant.bat @@ -54,7 +54,6 @@ goto end :checkJava set _JAVACMD=%JAVACMD% -set LOCALCLASSPATH=%ANT_HOME%\lib\ant-launcher.jar if "%JAVA_HOME%" == "" goto noJavaHome if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome @@ -69,24 +68,23 @@ if not "%JIKESPATH%"=="" goto runAntWithJikes :runAnt if not "%CLASSPATH%"=="" goto runAntWithClasspath -"%_JAVACMD%" %ANT_OPTS% -classpath "%LOCALCLASSPATH%" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS% +"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS% goto end :runAntWithClasspath -"%_JAVACMD%" %ANT_OPTS% -classpath "%LOCALCLASSPATH%" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS% -lib "%CLASSPATH%" +"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -lib "%CLASSPATH%" %ANT_CMD_LINE_ARGS% goto end :runAntWithJikes if not "%CLASSPATH%"=="" goto runAntWithJikesAndClasspath -"%_JAVACMD%" %ANT_OPTS% -classpath "%LOCALCLASSPATH%" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS% +"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS% goto end :runAntWithJikesAndClasspath -"%_JAVACMD%" %ANT_OPTS% -classpath "%LOCALCLASSPATH%" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS% -lib "%CLASSPATH%" +"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -lib "%CLASSPATH%" %ANT_CMD_LINE_ARGS% goto end :end -set LOCALCLASSPATH= set _JAVACMD= set ANT_CMD_LINE_ARGS=