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); | ||||