diff --git a/src/main/org/apache/tools/ant/launch/Launcher.java b/src/main/org/apache/tools/ant/launch/Launcher.java index cf8b2d3fa..889e0cf26 100644 --- a/src/main/org/apache/tools/ant/launch/Launcher.java +++ b/src/main/org/apache/tools/ant/launch/Launcher.java @@ -224,54 +224,13 @@ public class Launcher { newArgs = (String[]) argList.toArray(new String[argList.size()]); } - List libPathURLs = new ArrayList(); - - if (cpString != null && !noClassPath) { - addPath(cpString, false, libPathURLs); - } - - for (Iterator i = libPaths.iterator(); i.hasNext();) { - String libPath = (String) i.next(); - addPath(libPath, true, libPathURLs); - } - - URL[] libJars = (URL[]) libPathURLs.toArray(new URL[libPathURLs.size()]); - - // Now try and find JAVA_HOME - File toolsJar = Locator.getToolsJar(); - - // determine ant library directory for system jars: use property - // or default using location of ant-launcher.jar - File antLibDir = null; - String antLibDirProperty = System.getProperty(ANTLIBDIR_PROPERTY); - if (antLibDirProperty != null) { - antLibDir = new File(antLibDirProperty); - } - if ((antLibDir == null) || !antLibDir.exists()) { - antLibDir = jarDir; - System.setProperty(ANTLIBDIR_PROPERTY, antLibDir.getAbsolutePath()); - } - URL[] systemJars = Locator.getLocationURLs(antLibDir); - - File userLibDir - = new File(System.getProperty(USER_HOMEDIR), USER_LIBDIR); - - URL[] userJars = noUserLib ? new URL[0] : Locator.getLocationURLs(userLibDir); - - int numJars = libJars.length + userJars.length + systemJars.length; - if (toolsJar != null) { - numJars++; - } - URL[] jars = new URL[numJars]; - 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) { - jars[jars.length - 1] = Locator.fileToURL(toolsJar); - } + URL[] libURLs = getLibPathURLs( + noClassPath ? null : cpString, libPaths); + URL[] systemURLs = getSystemURLs(jarDir); + URL[] userURLs = noUserLib ? new URL[0] : getUserURLs(); + URL[] jars = getJarArray( + libURLs, userURLs, systemURLs, Locator.getToolsJar()); // now update the class.path property StringBuffer baseClassPath @@ -309,4 +268,83 @@ public class Launcher { } return exitCode; } + + /** + * Get the list of -lib enties and -cp entry into + * a URL array. + * @param cpString the classpath string + * @param libPaths the list of -lib entries. + * @return an array of URLs. + */ + private URL[] getLibPathURLs(String cpString, List libPaths) + throws MalformedURLException { + List libPathURLs = new ArrayList(); + + if (cpString != null) { + addPath(cpString, false, libPathURLs); + } + + for (Iterator i = libPaths.iterator(); i.hasNext();) { + String libPath = (String) i.next(); + addPath(libPath, true, libPathURLs); + } + + return (URL[]) libPathURLs.toArray(new URL[libPathURLs.size()]); + } + + /** + * Get the jar files in ANT_HOME/lib. + * determine ant library directory for system jars: use property + * or default using location of ant-launcher.jar + */ + private URL[] getSystemURLs(File antLauncherDir) throws MalformedURLException { + File antLibDir = null; + String antLibDirProperty = System.getProperty(ANTLIBDIR_PROPERTY); + if (antLibDirProperty != null) { + antLibDir = new File(antLibDirProperty); + } + if ((antLibDir == null) || !antLibDir.exists()) { + antLibDir = antLauncherDir; + System.setProperty(ANTLIBDIR_PROPERTY, antLibDir.getAbsolutePath()); + } + return Locator.getLocationURLs(antLibDir); + } + + /** + * Get the jar files in user.home/.ant/lib + */ + private URL[] getUserURLs() throws MalformedURLException { + File userLibDir + = new File(System.getProperty(USER_HOMEDIR), USER_LIBDIR); + + return Locator.getLocationURLs(userLibDir); + } + + /** + * Combine the various jar sources into a single array of jars. + * @param libJars the jars specified in -lib command line options + * @param userJars the jars in ~/.ant/lib + * @param systemJars the jars in $ANT_HOME/lib + * @param toolsJar the tools.jar file + * @return a combined array + * @throws MalformedURLException if there is a problem. + */ + private URL[] getJarArray ( + URL[] libJars, URL[] userJars, URL[] systemJars, File toolsJar) + throws MalformedURLException { + int numJars = libJars.length + userJars.length + systemJars.length; + if (toolsJar != null) { + numJars++; + } + URL[] jars = new URL[numJars]; + 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) { + jars[jars.length - 1] = Locator.fileToURL(toolsJar); + } + return jars; + } }