diff --git a/WHATSNEW b/WHATSNEW index bf01dd9ab..4b9bb1088 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -60,7 +60,7 @@ Other changes: Bugzilla Report 16539. * 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. * 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 optional alternate value to set the property to if the nested condition evaluates to false. Bugzilla report 33074. + +* Added condition, for inline scripted conditions + +* Added condition for exclusive-or combining of nested conditions. + +* Added 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 ===================================================== diff --git a/fetch.xml b/fetch.xml index 3c41949b2..0e49293e6 100644 --- a/fetch.xml +++ b/fetch.xml @@ -16,8 +16,8 @@ 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 - -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) You may also need to set proxy settings. This can be done on the command line, @@ -60,7 +60,10 @@ - + + + + @@ -68,10 +71,7 @@ - - - - + Unknown destination : ${dest} @@ -183,10 +183,16 @@ description="load bsf libraries" depends="init"> - + + + + + + depends="logging,junit,xml,networking,regexp,antlr,bcel,jdepend,bsf,debugging" /> diff --git a/lib/libraries.properties b/lib/libraries.properties index 5b2e7aa37..6b8d81f06 100644 --- a/lib/libraries.properties +++ b/lib/libraries.properties @@ -15,6 +15,7 @@ log4j.version=1.2.8 #rhino.version=1.5R5 oro.version=2.0.8 regexp.version=1.3 +which.version=1.0 xerces.version=2.6.2 xalan.version=2.5.1 xml-resolver.version=1.1 diff --git a/src/main/org/apache/tools/ant/Diagnostics.java b/src/main/org/apache/tools/ant/Diagnostics.java index b2a81e4d7..354859347 100644 --- a/src/main/org/apache/tools/ant/Diagnostics.java +++ b/src/main/org/apache/tools/ant/Diagnostics.java @@ -17,6 +17,7 @@ package org.apache.tools.ant; import org.apache.tools.ant.util.LoaderUtils; +import org.apache.tools.ant.launch.Launcher; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParser; @@ -95,20 +96,23 @@ public final class Diagnostics { return null; } 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() { public boolean accept(File dir, String name) { 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; } @@ -128,21 +132,8 @@ public final class Diagnostics { * '?.?' for JDK 1.0 or 1.1. */ 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(); out.println("-------------------------------------------"); - out.println(" Implementation Version (JDK1.2+ only)"); + out.println(" Implementation Version "); out.println("-------------------------------------------"); out.println("core tasks : " + getImplementationVersion(Main.class)); @@ -231,7 +222,13 @@ public final class Diagnostics { out.println("-------------------------------------------"); out.println(" ANT_HOME/lib jar listing"); 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("-------------------------------------------"); @@ -278,11 +275,34 @@ public final class Diagnostics { * Report the content of ANT_HOME/lib directory * @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")); 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) { - out.println("Unable to list libraries."); + out.println("No such directory."); return; } for (int i = 0; i < libs.length; i++) { diff --git a/src/main/org/apache/tools/ant/launch/Launcher.java b/src/main/org/apache/tools/ant/launch/Launcher.java index 5ff0d189b..0b32e52cc 100644 --- a/src/main/org/apache/tools/ant/launch/Launcher.java +++ b/src/main/org/apache/tools/ant/launch/Launcher.java @@ -38,11 +38,22 @@ public class Launcher { /** The Ant Library Directory property */ 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 */ - 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 */ 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 @@ -191,7 +202,8 @@ public class Launcher { URL[] systemJars = Locator.getLocationURLs(antLibDir); 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);