Refactored the constants in the launcher for better sharing. I worry about the hard coded file separator there (/), so replaced in the code, but left the constant in, in case someone was using it. Updated WHATSNEW. Added which.jar to the fetchables. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277559 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -60,7 +60,7 @@ Other changes: | |||||
| Bugzilla Report 16539. | Bugzilla Report 16539. | ||||
| * Added -nouserlib option to allow running ant without automatically loading | * Added -nouserlib option to allow running ant without automatically loading | ||||
| up ${user.dir}/.lib/ant. This is useful when compiling ant, and antlibs. | |||||
| up ${user.home}/.lib/ant. This is useful when compiling ant, and antlibs. | |||||
| Modified the build.sh and build.bat to use the option. | Modified the build.sh and build.bat to use the option. | ||||
| * Added -noclasspath option to allow running ant WITHOUT using CLASSPATH env | * Added -noclasspath option to allow running ant WITHOUT using CLASSPATH env | ||||
| @@ -90,6 +90,14 @@ Other changes: | |||||
| * Add else attribute to the condition task, which specifies an | * Add else attribute to the condition task, which specifies an | ||||
| optional alternate value to set the property to if the nested | optional alternate value to set the property to if the nested | ||||
| condition evaluates to false. Bugzilla report 33074. | condition evaluates to false. Bugzilla report 33074. | ||||
| * Added <scriptcondition> condition, for inline scripted conditions | |||||
| * Added <xor> condition for exclusive-or combining of nested conditions. | |||||
| * Added <scriptselector> selector for scripted file selection | |||||
| * ant -diagnostics lists contents of ${user.home}/.ant/lib | |||||
| Changes from Ant 1.6.2 to current Ant 1.6 CVS version | Changes from Ant 1.6.2 to current Ant 1.6 CVS version | ||||
| ===================================================== | ===================================================== | ||||
| @@ -16,8 +16,8 @@ | |||||
| and installs them in a location that is accessible the next time Ant runs. | and installs them in a location that is accessible the next time Ant runs. | ||||
| You can choose three locations, by going -Ddest=LOCATION on the command line | You can choose three locations, by going -Ddest=LOCATION on the command line | ||||
| -Ddest=user user lib dir ${user.home}/.ant/lib --Default-- | |||||
| -Ddest=system ant lib dir ${ant.home}/lib | |||||
| -Ddest=user user lib dir ${user.home}/.ant/lib | |||||
| -Ddest=system ant lib dir ${ant.home}/lib --Default-- | |||||
| -Ddest=optional optional dir ${ant.home}/lib/optional (for Ant developers) | -Ddest=optional optional dir ${ant.home}/lib/optional (for Ant developers) | ||||
| You may also need to set proxy settings. This can be done on the command line, | You may also need to set proxy settings. This can be done on the command line, | ||||
| @@ -60,7 +60,10 @@ | |||||
| <target name="pick-dest"> | <target name="pick-dest"> | ||||
| <condition property="dest.dir" | <condition property="dest.dir" | ||||
| value="${lib.dir}"> | value="${lib.dir}"> | ||||
| <equals arg1="${dest}" arg2="system" /> | |||||
| <or> | |||||
| <equals arg1="${dest}" arg2="system" /> | |||||
| <not><isset property="dest"/></not> | |||||
| </or> | |||||
| </condition> | </condition> | ||||
| <condition property="dest.dir" | <condition property="dest.dir" | ||||
| value="${optional.dir}"> | value="${optional.dir}"> | ||||
| @@ -68,10 +71,7 @@ | |||||
| </condition> | </condition> | ||||
| <condition property="dest.dir" | <condition property="dest.dir" | ||||
| value="${userlib.dir}"> | value="${userlib.dir}"> | ||||
| <or> | |||||
| <equals arg1="${dest}" arg2="user" /> | |||||
| <not><isset property="dest"/></not> | |||||
| </or> | |||||
| <equals arg1="${dest}" arg2="user" /> | |||||
| </condition> | </condition> | ||||
| <fail> | <fail> | ||||
| Unknown destination : ${dest} | Unknown destination : ${dest} | ||||
| @@ -183,10 +183,16 @@ | |||||
| description="load bsf libraries" | description="load bsf libraries" | ||||
| depends="init"> | depends="init"> | ||||
| <f project="bsf" /> | <f project="bsf" /> | ||||
| </target> | |||||
| </target> | |||||
| <target name="debugging" | |||||
| description="internal ant debugging" | |||||
| depends="init"> | |||||
| <f project="which" /> | |||||
| </target> | |||||
| <target name="all" | <target name="all" | ||||
| description="load all the libraries" | description="load all the libraries" | ||||
| depends="logging,junit,xml,networking,regexp,antlr,bcel,jdepend,bsf" /> | |||||
| depends="logging,junit,xml,networking,regexp,antlr,bcel,jdepend,bsf,debugging" /> | |||||
| </project> | </project> | ||||
| @@ -15,6 +15,7 @@ log4j.version=1.2.8 | |||||
| #rhino.version=1.5R5 | #rhino.version=1.5R5 | ||||
| oro.version=2.0.8 | oro.version=2.0.8 | ||||
| regexp.version=1.3 | regexp.version=1.3 | ||||
| which.version=1.0 | |||||
| xerces.version=2.6.2 | xerces.version=2.6.2 | ||||
| xalan.version=2.5.1 | xalan.version=2.5.1 | ||||
| xml-resolver.version=1.1 | xml-resolver.version=1.1 | ||||
| @@ -17,6 +17,7 @@ | |||||
| package org.apache.tools.ant; | package org.apache.tools.ant; | ||||
| import org.apache.tools.ant.util.LoaderUtils; | import org.apache.tools.ant.util.LoaderUtils; | ||||
| import org.apache.tools.ant.launch.Launcher; | |||||
| import javax.xml.parsers.SAXParserFactory; | import javax.xml.parsers.SAXParserFactory; | ||||
| import javax.xml.parsers.SAXParser; | import javax.xml.parsers.SAXParser; | ||||
| @@ -95,20 +96,23 @@ public final class Diagnostics { | |||||
| return null; | return null; | ||||
| } | } | ||||
| File libDir = new File(home, "lib"); | File libDir = new File(home, "lib"); | ||||
| return listJarFiles(libDir); | |||||
| } | |||||
| /** | |||||
| * get a list of all JAR files in a directory | |||||
| * @param libDir directory | |||||
| * @return array of files (or null for no such directory) | |||||
| */ | |||||
| private static File[] listJarFiles(File libDir) { | |||||
| FilenameFilter filter = new FilenameFilter() { | FilenameFilter filter = new FilenameFilter() { | ||||
| public boolean accept(File dir, String name) { | public boolean accept(File dir, String name) { | ||||
| return name.endsWith(".jar"); | return name.endsWith(".jar"); | ||||
| } | } | ||||
| }; | }; | ||||
| // listFiles is JDK 1.2+ method... | |||||
| String[] filenames = libDir.list(filter); | |||||
| if (filenames == null) { | |||||
| return null; | |||||
| } | |||||
| File[] files = new File[filenames.length]; | |||||
| for (int i = 0; i < filenames.length; i++) { | |||||
| files[i] = new File(libDir, filenames[i]); | |||||
| } | |||||
| File[] files = libDir.listFiles(filter); | |||||
| return files; | return files; | ||||
| } | } | ||||
| @@ -128,21 +132,8 @@ public final class Diagnostics { | |||||
| * '?.?' for JDK 1.0 or 1.1. | * '?.?' for JDK 1.0 or 1.1. | ||||
| */ | */ | ||||
| private static String getImplementationVersion(Class clazz) { | private static String getImplementationVersion(Class clazz) { | ||||
| try { | |||||
| // Package pkg = clazz.getPackage(); | |||||
| Method method = Class.class.getMethod("getPackage", new Class[0]); | |||||
| Object pkg = method.invoke(clazz, (Object[]) null); | |||||
| if (pkg != null) { | |||||
| // pkg.getImplementationVersion(); | |||||
| method = pkg.getClass().getMethod("getImplementationVersion", new Class[0]); | |||||
| Object version = method.invoke(pkg, (Object[]) null); | |||||
| return (String) version; | |||||
| } | |||||
| } catch (Exception e) { | |||||
| // JDK < 1.2 should land here because the methods above don't exist. | |||||
| return "?.?"; | |||||
| } | |||||
| return null; | |||||
| Package pkg = clazz.getPackage(); | |||||
| return pkg.getImplementationVersion(); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -213,7 +204,7 @@ public final class Diagnostics { | |||||
| out.println(Main.getAntVersion()); | out.println(Main.getAntVersion()); | ||||
| out.println(); | out.println(); | ||||
| out.println("-------------------------------------------"); | out.println("-------------------------------------------"); | ||||
| out.println(" Implementation Version (JDK1.2+ only)"); | |||||
| out.println(" Implementation Version "); | |||||
| out.println("-------------------------------------------"); | out.println("-------------------------------------------"); | ||||
| out.println("core tasks : " + getImplementationVersion(Main.class)); | out.println("core tasks : " + getImplementationVersion(Main.class)); | ||||
| @@ -231,7 +222,13 @@ public final class Diagnostics { | |||||
| out.println("-------------------------------------------"); | out.println("-------------------------------------------"); | ||||
| out.println(" ANT_HOME/lib jar listing"); | out.println(" ANT_HOME/lib jar listing"); | ||||
| out.println("-------------------------------------------"); | out.println("-------------------------------------------"); | ||||
| doReportLibraries(out); | |||||
| doReportAntHomeLibraries(out); | |||||
| out.println(); | |||||
| out.println("-------------------------------------------"); | |||||
| out.println(" USER_HOME/.ant/lib jar listing"); | |||||
| out.println("-------------------------------------------"); | |||||
| doReportUserHomeLibraries(out); | |||||
| out.println(); | out.println(); | ||||
| out.println("-------------------------------------------"); | out.println("-------------------------------------------"); | ||||
| @@ -278,11 +275,34 @@ public final class Diagnostics { | |||||
| * Report the content of ANT_HOME/lib directory | * Report the content of ANT_HOME/lib directory | ||||
| * @param out the stream to print the content to | * @param out the stream to print the content to | ||||
| */ | */ | ||||
| private static void doReportLibraries(PrintStream out) { | |||||
| private static void doReportAntHomeLibraries(PrintStream out) { | |||||
| out.println("ant.home: " + System.getProperty("ant.home")); | out.println("ant.home: " + System.getProperty("ant.home")); | ||||
| File[] libs = listLibraries(); | File[] libs = listLibraries(); | ||||
| printLibraries(libs, out); | |||||
| } | |||||
| /** | |||||
| * Report the content of ~/.ant/lib directory | |||||
| * | |||||
| * @param out the stream to print the content to | |||||
| */ | |||||
| private static void doReportUserHomeLibraries(PrintStream out) { | |||||
| String home = System.getProperty(Launcher.USER_HOMEDIR); | |||||
| out.println("user.home: " + home); | |||||
| File libDir = new File(home, | |||||
| Launcher.ANT_PRIVATEDIR+File.separator+Launcher.ANT_PRIVATELIB); | |||||
| File[] libs=listJarFiles(libDir); | |||||
| printLibraries(libs, out); | |||||
| } | |||||
| /** | |||||
| * list the libraries | |||||
| * @param libs array of libraries (can be null) | |||||
| * @param out output stream | |||||
| */ | |||||
| private static void printLibraries(File[] libs, PrintStream out) { | |||||
| if (libs == null) { | if (libs == null) { | ||||
| out.println("Unable to list libraries."); | |||||
| out.println("No such directory."); | |||||
| return; | return; | ||||
| } | } | ||||
| for (int i = 0; i < libs.length; i++) { | for (int i = 0; i < libs.length; i++) { | ||||
| @@ -38,11 +38,22 @@ public class Launcher { | |||||
| /** The Ant Library Directory property */ | /** The Ant Library Directory property */ | ||||
| public static final String ANTLIBDIR_PROPERTY = "ant.library.dir"; | public static final String ANTLIBDIR_PROPERTY = "ant.library.dir"; | ||||
| public static final String ANT_PRIVATEDIR = ".ant"; | |||||
| /** | |||||
| * The location of a per-user library directory | |||||
| */ | |||||
| public static final String ANT_PRIVATELIB = "lib"; | |||||
| /** The location of a per-user library directory */ | /** The location of a per-user library directory */ | ||||
| public static final String USER_LIBDIR = ".ant/lib"; | |||||
| public static final String USER_LIBDIR = ANT_PRIVATEDIR+"/"+ ANT_PRIVATELIB; | |||||
| /** The startup class that is to be run */ | /** The startup class that is to be run */ | ||||
| public static final String MAIN_CLASS = "org.apache.tools.ant.Main"; | public static final String MAIN_CLASS = "org.apache.tools.ant.Main"; | ||||
| /** | |||||
| * system property with user home directory | |||||
| */ | |||||
| public static final String USER_HOMEDIR = "user.home"; | |||||
| /** | /** | ||||
| * Entry point for starting command line Ant | * Entry point for starting command line Ant | ||||
| @@ -191,7 +202,8 @@ public class Launcher { | |||||
| URL[] systemJars = Locator.getLocationURLs(antLibDir); | URL[] systemJars = Locator.getLocationURLs(antLibDir); | ||||
| File userLibDir | File userLibDir | ||||
| = new File(System.getProperty("user.home"), USER_LIBDIR); | |||||
| = new File(System.getProperty(USER_HOMEDIR), | |||||
| ANT_PRIVATEDIR + File.separatorChar + ANT_PRIVATELIB); | |||||
| URL[] userJars = noUserLib ? new URL[0] : Locator.getLocationURLs(userLibDir); | URL[] userJars = noUserLib ? new URL[0] : Locator.getLocationURLs(userLibDir); | ||||