Browse Source

diagnostics should list lib dir too.

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-ffa450edef68
master
Steve Loughran 20 years ago
parent
commit
9e260d7fa3
5 changed files with 87 additions and 40 deletions
  1. +9
    -1
      WHATSNEW
  2. +15
    -9
      fetch.xml
  3. +1
    -0
      lib/libraries.properties
  4. +48
    -28
      src/main/org/apache/tools/ant/Diagnostics.java
  5. +14
    -2
      src/main/org/apache/tools/ant/launch/Launcher.java

+ 9
- 1
WHATSNEW View File

@@ -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 <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
=====================================================


+ 15
- 9
fetch.xml View File

@@ -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 @@
<target name="pick-dest">
<condition property="dest.dir"
value="${lib.dir}">
<equals arg1="${dest}" arg2="system" />
<or>
<equals arg1="${dest}" arg2="system" />
<not><isset property="dest"/></not>
</or>
</condition>
<condition property="dest.dir"
value="${optional.dir}">
@@ -68,10 +71,7 @@
</condition>
<condition property="dest.dir"
value="${userlib.dir}">
<or>
<equals arg1="${dest}" arg2="user" />
<not><isset property="dest"/></not>
</or>
<equals arg1="${dest}" arg2="user" />
</condition>
<fail>
Unknown destination : ${dest}
@@ -183,10 +183,16 @@
description="load bsf libraries"
depends="init">
<f project="bsf" />
</target>
</target>

<target name="debugging"
description="internal ant debugging"
depends="init">
<f project="which" />
</target>
<target name="all"
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>

+ 1
- 0
lib/libraries.properties View File

@@ -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


+ 48
- 28
src/main/org/apache/tools/ant/Diagnostics.java View File

@@ -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++) {


+ 14
- 2
src/main/org/apache/tools/ant/launch/Launcher.java View File

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



Loading…
Cancel
Save