You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2011/11/08 15:03:57 UTC

svn commit: r1199248 [1/2] - in /db/derby/code/trunk: ./ java/build/org/apache/derbyPreBuild/ java/client/ java/demo/ java/demo/toursdb/ java/drda/org/apache/derby/drda/ java/drda/org/apache/derby/impl/drda/ java/engine/org/apache/derby/iapi/jdbc/ java...

Author: rhillegas
Date: Tue Nov  8 14:03:55 2011
New Revision: 1199248

URL: http://svn.apache.org/viewvc?rev=1199248&view=rev
Log:
DERBY-5485: Reduce the responsibility of PropertySetter in order to make it less brittle.

Modified:
    db/derby/code/trunk/BUILDING.html
    db/derby/code/trunk/build.xml
    db/derby/code/trunk/java/build/org/apache/derbyPreBuild/PropertySetter.java
    db/derby/code/trunk/java/client/build.xml
    db/derby/code/trunk/java/demo/build.xml
    db/derby/code/trunk/java/demo/toursdb/build.xml
    db/derby/code/trunk/java/drda/org/apache/derby/drda/build.xml
    db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/reference/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/crypto/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/store/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/impl/io/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/impl/services/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/impl/store/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/jdbc/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/osgi/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/vti/build.xml
    db/derby/code/trunk/java/shared/build.xml
    db/derby/code/trunk/java/storeless/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/i18n/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/junitTests/compatibility/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/largedata/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/memory/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/memorydb/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/perf/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/replicationTests/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/util/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/perf/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/mailjdbc/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/optimizer/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/sttest/build.xml
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/build.xml
    db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/build.xml

Modified: db/derby/code/trunk/BUILDING.html
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/BUILDING.html?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/BUILDING.html (original)
+++ db/derby/code/trunk/BUILDING.html Tue Nov  8 14:03:55 2011
@@ -420,17 +420,17 @@ Derby is supposed to run in all of the f
     </TR>
 
     <TR>
-      <TD><b><i>Java 6</i></b></TD>
-      <TD><b><i>JDBC 4</i></b></TD>
+      <TD><b><i>Java 7</i></b></TD>
+      <TD><b><i>JDBC 4.1</i></b></TD>
     </TR>
 
     <TR>
-      <TD><b><i>Java 5</i></b></TD>
-      <TD><b><i>JDBC 3</i></b></TD>
+      <TD><b><i>Java 6</i></b></TD>
+      <TD><b><i>JDBC 4.0</i></b></TD>
     </TR>
 
     <TR>
-      <TD><b><i>JDK 1.4.2</i></b></TD>
+      <TD><b><i>Java 5</i></b></TD>
       <TD><b><i>JDBC 3</i></b></TD>
     </TR>
 
@@ -475,46 +475,46 @@ enforces compile-time contracts for the 
     </TR>
 
     <TR>
+      <TD><b><i>Java 7</i></b></TD>
+      <TD><b><i>java17compile.classpath</i></b></TD>
+      <TD>The set of libraries in the Java 7 JDK. The build fails if
+      your environment isn't a Java 5, 6 or 7 JDK.</TD>
+      <TD>The set of system jars in your JDK if your environment is
+      JDK 7. Otherwise,
+      <i>${java16compile.classpath}</i></TD>
+    </TR>
+
+    <TR>
       <TD><b><i>Java 6</i></b></TD>
       <TD><b><i>java16compile.classpath</i></b></TD>
-      <TD>The Derby build tries to find a Java 6
-      JDK on your machine. The build fails if it can't find a Java 5
-      or Java 6 JDK.</TD>
-      <TD>The list of jars in your Java 6 JDK if the build can find them. Otherwise,
-      <i>classes/stubs/jdbc4:${java15compile.classpath}</i></TD>
+      <TD>The set of libraries in the Java 6 JDK. The build fails if
+      your environment isn't a Java 5, 6 or 7 JDK.</TD>
+      <TD>The set of system jars in your JDK if your environment is
+      JDK 6. Otherwise, <i>classes/stubs/jdbc4:${java15compile.classpath}</i> if your environment
+      is JDK 5. Otherwise
+      <i>${java17compile.classpath}</i></TD>
     </TR>
 
     <TR>
       <TD><b><i>Java 5</i></b></TD>
       <TD><b><i>java15compile.classpath</i></b></TD>
-      <TD>The Derby build tries to find a Java 5
-      JDK on your machine. The build fails if it can't find a Java 5
-      or Java 6 JDK.</TD>
-      <TD>The list of jars in your Java 5 JDK if the build can find them. Otherwise,
+      <TD>The set of libraries in the Java 5 JDK. The build fails if
+      your environment isn't a Java 5, 6 or 7 JDK.</TD>
+      <TD>The set of system jars in your JDK if your environment is
+      JDK 5. Otherwise,
       <i>classes/stubs/jdbc3:${java16compile.classpath}</i></TD>
     </TR>
 
     <TR>
-      <TD><b><i>JDK 1.4.2</i></b></TD>
-      <TD><b><i>java14compile.classpath</i></b></TD>
-      <TD>The Derby build tries to find a 1.4 JDK
-      on your machine. Note that Sun and IBM supply free 1.4.2 JDKs for many machines.</TD>
-      <TD>The list of jars in your 1.4 JDK if the build can find
-      them. Otherwise,
-      <i>${java15compile.classpath}</i>
-      </TD>
-    </TR>
-
-    <TR>
       <TD><b><i>Small Device (CDC/FP 1.1)</i></b></TD>
       <TD><b><i>jsr169compile.classpath</i></b></TD>
       <TD>This should be set to the list of small device libraries on
       your machine--if you have them. That is, the CDC/FP 1.1 jars and
       the jsr169 jar. To get a set of small device libraries, see
-      <a href="http://blogs.sun.com/wittyman/entry/javadb_on_sun_javame_cdc">Sun's instructions</a>
+      <a href="http://blogs.sun.com/wittyman/entry/javadb_on_sun_javame_cdc">Oracle's instructions</a>
       or download IBM's WCTME 5.7.
       </TD>
-      <TD><i>classes/stubs/jsr169:${java14compile.classpath}</i></TD>
+      <TD><i>classes/stubs/jsr169:${java15compile.classpath}</i></TD>
     </TR>
 
   </TBODY>
@@ -523,12 +523,8 @@ enforces compile-time contracts for the 
 <br/>
 <p>
 The preceding variables are mandatory for the Derby build.
-For Mac OS X, Solaris, and many Linux and IBM machines, Derby
-can figure out where the JDKs live and can therefore set the
-preceding variables to reasonable values if you don't set them. For
-other platforms, the Derby build may not be able to figure out where the JDKs
-live. On those platforms, you can help the Derby build by setting the following optional
-variables in <i>ant.properties</i>:
+You can also force the setting of the preceding variables by setting the following optional
+library variables in <i>ant.properties</i>:
 </p>
 
 <TABLE border="2">
@@ -541,15 +537,6 @@ variables in <i>ant.properties</i>:
     </TR>
 
     <TR>
-      <TD><b><i>j14lib</i></b></TD>
-      <TD>If you set this variable to be the directory which contains
-      your 1.4 jars, then the Derby build will set
-      <i>java14compile.classpath</i> to be the list of jars in that directory.
-      </TD>
-      <TD>Optional variable. No default value.</TD>
-    </TR>
-
-    <TR>
       <TD><b><i>j15lib</i></b></TD>
       <TD>If you set this variable to be the directory which contains
       your Java 5 jars, then the Derby build will set
@@ -567,6 +554,15 @@ variables in <i>ant.properties</i>:
       <TD>Optional variable. No default value.</TD>
     </TR>
 
+    <TR>
+      <TD><b><i>j17lib</i></b></TD>
+      <TD>If you set this variable to be the directory which contains
+      your Java 7 jars, then the Derby build will set
+      <i>java17compile.classpath</i> to be the list of jars in that directory.
+      </TD>
+      <TD>Optional variable. No default value.</TD>
+    </TR>
+
   </TBODY>
 </TABLE>
 

Modified: db/derby/code/trunk/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/build.xml (original)
+++ db/derby/code/trunk/build.xml Tue Nov  8 14:03:55 2011
@@ -301,11 +301,6 @@
     -->
     <property name="java17compile.classpath" value="${java16compile.classpath}"/>
 
-    <!-- 
-            If a 1.4 JDK is not present, then use the Java 5 environment to build the 1.4 support
-    -->
-    <property name="java14compile.classpath" value="${java15compile.classpath}"/>
-
     <property file="${properties.dir}/compilepath.properties"/>
     <!-- Release and version info -->
     <property file="${properties.dir}/release.properties"/>
@@ -314,7 +309,7 @@
             If the user hasn't already set this property, point it at our stub
             implementation of JSR169.
     -->
-    <property name="jsr169compile.classpath" value="${out.jsr169.dir}:${java14compile.classpath}"/>
+    <property name="jsr169compile.classpath" value="${out.jsr169.dir}:${java15compile.classpath}"/>
 
     <!-- 
             The lowest common denominator compile path for Derby. We expect that
@@ -347,8 +342,6 @@
     <echo message="${checkEvent} compilerLevel16 = ${compilerLevel16}"/>
     <echo message="${checkEvent} compile.classpath = ${compile.classpath}"/>
     <echo message="${checkEvent} jsr169compile.classpath = ${jsr169compile.classpath}"/>
-    <echo message="${checkEvent} j14lib = ${j14lib}"/>
-    <echo message="${checkEvent} java14compile.classpath = ${java14compile.classpath}"/>
     <echo message="${checkEvent} j15lib = ${j15lib}"/>
     <echo message="${checkEvent} java15compile.classpath = ${java15compile.classpath}"/>
     <echo message="${checkEvent} j16lib = ${j16lib}"/>
@@ -826,7 +819,7 @@
       srcdir="${derby.jdbc3.src.dir}"
       destdir="${out.jdbc3.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
      </javac>
 
@@ -880,7 +873,7 @@
       srcdir="${derby.felix.src.dir}"
       destdir="${out.felix.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
      </javac>
 
@@ -1100,7 +1093,7 @@
   <target name="public-jdbc3-api">
  
     <antcall target="publishedapi-workhorse">
-      <param name="bootClasspath" value="${java14compile.classpath}"/>
+      <param name="bootClasspath" value="${java15compile.classpath}"/>
       <param name="extraApi" value="publishedapi_jdbc3.ant"/>
     </antcall>
 
@@ -1211,7 +1204,7 @@
         access="private"
         breakiterator="yes"
         useexternalfile="yes"
-        classpath="${out.dir};${java16compile.classpath};${jars.javadoc}"
+        classpath="${out.dir};${jars.javadoc}"
         destdir="${out.javadoc.dir}/engine"
         windowtitle="Apache Derby V${major}.${minor} Internals"
         doctitle="Apache Derby V${major}.${minor} Internals"

Modified: db/derby/code/trunk/java/build/org/apache/derbyPreBuild/PropertySetter.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/build/org/apache/derbyPreBuild/PropertySetter.java?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/build/org/apache/derbyPreBuild/PropertySetter.java (original)
+++ db/derby/code/trunk/java/build/org/apache/derbyPreBuild/PropertySetter.java Tue Nov  8 14:03:55 2011
@@ -26,9 +26,12 @@ import java.io.FileFilter;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.net.URL;
+import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.List;
 
@@ -48,7 +51,6 @@ import org.apache.tools.ant.taskdefs.Pro
  * </p>
  *
  * <ul>
- * <li>java14compile.classpath</li>
  * <li>java15compile.classpath</li>
  * <li>java16compile.classpath</li>
  * <li>java17compile.classpath</li>
@@ -60,7 +62,6 @@ import org.apache.tools.ant.taskdefs.Pro
  * </p>
  *
  * <ul>
- * <li>j14lib</li>
  * <li>j15lib</li>
  * <li>j16lib</li>
  * <li>j17lib</li>
@@ -75,30 +76,9 @@ import org.apache.tools.ant.taskdefs.Pro
  * <li>Otherwise, if a library property is set, we attempt to set the
  * corresponding classpath property to be a list of all the jars in the
  * directory pointed to by the library property.</li>
- * <li>Otherwise we try to set the classpath properties to values
- * specific to the vendor of the running vm.</li>
- * <li>If we don't recognize the vendor of the running vm, print a warning
- * message and then try to set the classpath properties using the JDK with the
- * highest implementation version from any vendor matching the required
- * specification version. If a vendor has chosen to deviate significantly from
- * the file layout of other JDKs, the detection will most likely fail.
- * People using JDKs with a more exotic file layout should specify the library
- * directory explicitly through ant.properties, or resort to setting the compile
- * classpath manually.
+ * <li>Otherwise we set the classpath property corresponding to the version level of the running vm.</li>
  * </li>
  * </ul>
- *
- * <p>
- * This tool has been tested for the setting of jdk1.4 and Java 5 compiler
- * properties in the following environments:
- * </p>
- *
- * <ul>
- * <li>Apple JDKs on Mac OS X</li>
- * <li>Sun and IBM JDKs on Linux</li>
- * <li>Sun and IBM JDKs on Windows/Cygwin</li>
- * <li>Sun JDKs on Solaris</li>
- * </ul>
  */
 public class PropertySetter extends Task
 {
@@ -108,43 +88,29 @@ public class PropertySetter extends Task
     //
     /////////////////////////////////////////////////////////////////////////
 
-    private static  final   String  J14LIB = "j14lib";
-    private static  final   String  J14CLASSPATH = "java14compile.classpath";
-    private static  final   String  J15LIB = "j15lib";
-    private static  final   String  J15CLASSPATH = "java15compile.classpath";
-    private static  final   String  J16LIB = "j16lib";
-    private static  final   String  J16CLASSPATH = "java16compile.classpath";
-    private static  final   String  J17LIB = "j17lib";
-    private static  final   String  J17CLASSPATH = "java17compile.classpath";
+    // declared in ascending order
+    private static  final   VMLevel[]    VM_LEVELS =
+    {
+        new VMLevel( "15", "1.5" ),
+        new VMLevel( "16", "1.6" ),
+        new VMLevel( "17", "1.7" ),
+    };
 
     private static  final   String  JDK_VENDOR = "java.vendor";
     private static  final   String  JAVA_HOME = "java.home";
-
     private static  final   String  JAVA_VERSION = "java.version";
     private static  final   String  OPERATING_SYSTEM = "os.name";
 
-    private static  final   String  JDK_APPLE = "Apple ";
-    private static  final   String  JDK_IBM = "IBM Corporation";
-    private static  final   String  JDK_SUN = "Sun Microsystems Inc.";
-    private static  final   String  JDK_ORACLE = "Oracle Corporation";
-
-    private static  final   String  MAC_OSX = "Mac OS X";
-    private static  final   String  APPLE_CLASSES_DIR = "Classes";
-    private static  final   String  APPLE_COMMANDS_DIR = "Commands";
-    private static  final   String  APPLE_HOME_DIR = "Home";
-    private static  final   String  APPLE_LIBRARIES_DIR = "Libraries";
-    private static  final   String  APPLE_RESOURCES_DIR = "Resources";
-
-    private static  final   String  APPLE_LIB_DIR = "lib";
-    private static  final   String  APPLE_JRE_DIR = "jre";
-    private static  final   String  APPLE_JDK7_JRE_LIB_DIR = APPLE_JRE_DIR + "/" + APPLE_LIB_DIR;
-
     private static  final   String  PROPERTY_SETTER_DEBUG_FLAG = "printCompilerProperties";
     /** Property controlling extra verbose debugging information. */
     private static  final   String  PROPERTY_SETTER_VERBOSE_DEBUG_FLAG =
             "printCompilerPropertiesVerbose";
     private static boolean VERBOSE_DEBUG_ENABLED;
 
+    private static  final   String  FILE_TOKEN = "file:";
+    private static  final   String  JAR_TERMINATOR_TOKEN = "!";
+    private static  final   String  JAR_EXTENSION = ".jar";
+
     /////////////////////////////////////////////////////////////////////////
     //
     //  STATE
@@ -152,8 +118,6 @@ public class PropertySetter extends Task
     /////////////////////////////////////////////////////////////////////////
 
     private Hashtable   _propertiesSnapshot;
-    /** JDK vendor as reported by Java through the property 'java.vendor'. */
-    private String jdkVendor;
     
     /////////////////////////////////////////////////////////////////////////
     //
@@ -175,227 +139,60 @@ public class PropertySetter extends Task
             return candidate.getName().endsWith( ".jar" );
         }
     }
-    
+
     /**
      * <p>
-     * File filter to select child directories whose names contain a string.
+     * Describes a major Java version.
      * </p>
      */
-    public  static  final   class   DirContainsStringFilter   implements  FileFilter
-    {
-        private String  _substring;
-        
-        public  DirContainsStringFilter( String substring ) { _substring = substring; }
-
-        public  boolean accept( File candidate )
-        {
-            if ( !candidate.isDirectory() ) { return false; }
-
-            return ( candidate.getName().contains( _substring ) );
-        }
-    }
-    
-    /**
-     * Simple class holding information about a JDK.
-     * Note that the values will never be {@code null}. If a piece of
-     * information is missing, {@code UNKNOWN} will be used. If the JDK home
-     * variable is {@code null}, a runtime exception will be thrown.
-     */
-    //@Immutable
-    private static final class  JDKInfo {
-        /** Constant used when information is missing. */
-        public static final String UNKNOWN = "unknown";
-        /** The specification version of the JVM (i.e "1.6"). */
-        public final String specificationVersion;
-        /** The implementation version of the JVM (i.e. "1.6.0_14" or "6.0"). */
-        public final String implementationVersion;
-        /** The JDK implementation vendor. */
-        public final String vendor;
-        /** Path to the JDK home directory. */
-        public final String path;
-
-        JDKInfo(String vendor, String spec, String impl, String path) {
-            this.vendor = (vendor == null ? UNKNOWN : vendor);
-            this.specificationVersion = (spec == null ? UNKNOWN : spec);
-            this.implementationVersion = (impl == null ? UNKNOWN : impl);
-            this.path = path;
-            if (path == null) {
-                throw new IllegalArgumentException("JDK home cannot be null");
-            }
-        }
-
-        public String toString() {
-            return ("vendor=" + vendor + ", specVersion=" +
-                    specificationVersion + ", implVersion=" +
-                    implementationVersion + ", path=" + path);
-        }
-    }
-
-    /** Holds the names of properties which define a JDK version to the build */
-    private static  final   class   JDKVersion  implements Comparable
+    private static  final   class   VMLevel implements  Comparable
     {
-        private boolean _supportsGenerics;
-
-        /** This is the value returned by System.getProperty( "java.version" ) when you are running
-         * on the JVM corresponding to this JDKVersion. This value is used to look up the JDKVersion
-         * corresponding to the currently running JVM. */
-        private String  _baseJavaVersion;
-
-        /** This is the name of the lib property (e.g. "j14lib", "j15lib"). If this property is set, then we construct
-         * the corresponding classpath property (e.g., "java14compile.classpath", "java15compile.classpath")
-         * from the jar files in this directory */
-        private String  _libPropertyName;
-
-        /** This is the VM-specific classpath property which may be set by this program. It is used by the
-         * master build script. E.g.: "java14compile.classpath", "java15compile.classpath" */
-        private String  _classpathPropertyName;
-
-        /** This is the directory name stub which we look for in trying to find directories which contain
-         * Oracle JDKs. It is used by the setForMostJDKsJARInspection( ) and setForMostJDKs() methods. */
-        private String  _oracleDirectoryNameSeed;
-
-        /** This is the directory name stub which we look for in trying to find directories which contain
-         * IBM JDKs. It is used by the setForMostJDKsJARInspection( ) method. */        
-        private String  _ibmDirectoryNameSeed;
-
-        /** This is another directory name stub which we look for in trying to find directories which contain
-         * IBM JDKs. It is used by the setForMostJDKs( ) method. */        
-        private String  _ibmDirectoryNameSeedWithoutPeriod;
+        private int _sortOrder; // used by Comparable methods
+        private String  _propertySeed; // used to construct property names: java${seed}compile.classpath and j${seed}lib
+        private String _javaVersionPrefix; // leading prefix of value returned by System.getProperty( "java.version" )
 
-        private int _sortOrder;
-        //
-        // The order here is important. The JDKs are listed in ascending version number order.
-        // This order is used to compare them under the Comparable interface.
-        //
-        static  final   JDKVersion[]    ALL =
-        {
-            new JDKVersion( false, "1.4",  J14LIB, J14CLASSPATH, "1.4", "1.4", "142" ),
-            new JDKVersion( true, "1.5", J15LIB, J15CLASSPATH, "1.5", "5.0", "50" ),
-            new JDKVersion( true, "1.6", J16LIB, J16CLASSPATH, "1.6", "6.0", "60" ),
-            new JDKVersion( true, "1.7", J17LIB, J17CLASSPATH, "1.7", "7.0", "70" ),
-        };
-        private static  int _count = 0;
-
-        JDKVersion
+        private static  int _count = 0; // used to dole out sort orders
+        
+        public  VMLevel
             (
-             boolean supportsGenerics,
-             String baseJavaVersion,
-             String libPropertyName,
-             String classpathPropertyName,
-             String oracleDirectoryNameSeed,
-             String ibmDirectoryNameSeed,
-             String ibmDirectoryNameSeedWithoutPeriod
+             String propertySeed,
+             String javaVersionPrefix
              )
         {
             _sortOrder = _count++;
-            
-            _supportsGenerics = supportsGenerics;
-            _baseJavaVersion = baseJavaVersion;
-            _libPropertyName = libPropertyName;
-            _classpathPropertyName = classpathPropertyName;
-            _oracleDirectoryNameSeed = oracleDirectoryNameSeed;
-            _ibmDirectoryNameSeed = ibmDirectoryNameSeed;
-            _ibmDirectoryNameSeedWithoutPeriod = ibmDirectoryNameSeedWithoutPeriod;
-        }
-
-        /** Returns true if this version of the Java language understands generics */
-        boolean supportsGenerics() { return _supportsGenerics; }
-
-        /** Get the value of System.getProperty( "java.version" ) returned when running on this JVM */
-        String  getBaseJavaVersion() { return _baseJavaVersion; }
-
-        /** Get the name of the user-specified lib property which points at a library of jars to put on the classpath */
-        String  getLibPropertyName() { return _libPropertyName; }
-
-        /** Get the classpath property which the master build script expects us to set */
-        String  getClasspathPropertyName() { return _classpathPropertyName; }
-
-        /** Get the stub string we look for in order to find directories containing Oracle JDKs */
-        String  getOracleDirectoryNameSeed() { return _oracleDirectoryNameSeed; }
-
-        /** Get the stub string we look for in order to find directories containing IBM JDKs */
-        String  getIBMDirectoryNameSeed() { return _ibmDirectoryNameSeed; }
-
-        /** Get the stub string (without period separators) which we look for in order to find directories containing IBM JDKs */
-        String  getIBMDirectoryNameSeedWithoutPeriod() { return _ibmDirectoryNameSeedWithoutPeriod; }
-
-        /** Get the stub strings needed to find directories containing IBM JDKs. */
-        static String[]    getIBMDirectoryNameSeeds()
-        {
-            String[]    ibmNames = new String[ ALL.length ];
-            
-            for ( int i = 0; i < ALL.length; i++ ) { ibmNames[ i ] = ALL[ i ].getIBMDirectoryNameSeed(); }
-            
-            return ibmNames;
-        }
-        
-        /** Get the stub strings (without period separators) needed to find other directories containing IBM JDKs. */
-        static String[]    getIBMDirectoryNameSeedWithoutPeriods()
-        {
-            String[]    ibmNames = new String[ ALL.length ];
-            
-            for ( int i = 0; i < ALL.length; i++ ) { ibmNames[ i ] = ALL[ i ].getIBMDirectoryNameSeedWithoutPeriod(); }
-            
-            return ibmNames;
+            _propertySeed = propertySeed;
+            _javaVersionPrefix = javaVersionPrefix;
         }
 
-        /** Get the stub strings needed to find directories containing Oracle JDKs. */
-        static String[]    getOracleDirectoryNameSeeds()
+        /** Get the name of the lib property  corresponding to this VMLevel */
+        public  String  getLibPropertyName()
         {
-            String[]    oracleDirectoryNameSeeds = new String[ ALL.length ];
-            
-            for ( int i = 0; i < ALL.length; i++ ) { oracleDirectoryNameSeeds[ i ] = ALL[ i ].getOracleDirectoryNameSeed(); }
-            
-            return oracleDirectoryNameSeeds;
+            return "j" + _propertySeed + "lib";
         }
 
-        /** Get all of the JDK versions which support generics */
-        static  ArrayList<JDKVersion>   genericsSupporters()
+        /** Get the name of the classpath property corresponding to this VMLevel */
+        public  String  getClasspathPropertyName()
         {
-            ArrayList<JDKVersion>   retval = new ArrayList<JDKVersion>();
-
-            for ( JDKVersion current : ALL )
-            {
-                if ( current.supportsGenerics() ) { retval.add( current ); }
-            }
-
-            return retval;
+            return "java" + _propertySeed + "compile.classpath";
         }
 
-        /** Find the JDKVersion matching the passed-in value of the java.version property */
-        static  JDKVersion  matchJREversion( String jreVersion )
+        /** Returns true if this VMLevel corresponds to the the passed-in value of java.version */
+        public  boolean matchesJavaVersion( String javaVersion )
         {
-            for ( JDKVersion current : ALL )
-            {
-                if ( jreVersion.startsWith( current.getBaseJavaVersion() ) ) { return current; }
-            }
-            
-            return null;
+            return javaVersion.startsWith( _javaVersionPrefix );
         }
 
-        /** Find the JDKVersion with the passed-in classpath property name */
-        static  JDKVersion  matchClasspathPropertyName( String classpathPropertyName )
-        {
-            for ( JDKVersion current : ALL )
-            {
-                if ( classpathPropertyName.equals( current.getClasspathPropertyName() ) ) { return current; }
-            }
-            
-            return null;
-        }
-
-        // Comparable implementation
-        
+        // Comparable behavior
         public  int compareTo( Object other )
         {
-            if ( other ==  null ) { return 1; }
-            if ( !( other instanceof JDKVersion ) ) { return -1; }
-            else { return this._sortOrder - ((JDKVersion) other)._sortOrder; }
+            if ( other == null ) { return -1; }
+            else if ( !(other instanceof VMLevel) ) { return -1; }
+            else { return _sortOrder - ((VMLevel) other)._sortOrder; }
         }
         public  boolean equals( Object other ) { return ( compareTo( other ) == 0 ); }
         public  int hashCode() { return _sortOrder; }
     }
-
+    
     /////////////////////////////////////////////////////////////////////////
     //
     //  CONSTRUCTORS
@@ -419,8 +216,8 @@ public class PropertySetter extends Task
         
    /**
      * <p>
-     * Set properties based on the existing build environment. If, at the end of
-     * this method, the compiler properties are still not set, then we raise an
+     * Set properties based on the existing build environment. If at the end of
+     * this method none of the compiler properties are set, then we raise an
      * error and the build aborts.
      * </p>
      */
@@ -441,10 +238,13 @@ public class PropertySetter extends Task
             // There's nothing to do if the classpath properties are already set.
             //
             boolean isSet = true;
-            for ( int i = 0; (i < JDKVersion.ALL.length) && isSet; i++ ) { isSet &= isSet( JDKVersion.ALL[ i ].getClasspathPropertyName() ); }
+            for ( VMLevel vmLevel : VM_LEVELS )
+            {
+                isSet &= isSet( vmLevel.getClasspathPropertyName() );
+            }
             if ( isSet )
             {
-                debug("All required properties already set.");
+                debug("All possible properties already set.");
                 return;
             }
             
@@ -452,35 +252,24 @@ public class PropertySetter extends Task
             // If the library properties are set, then use them to set the
             // classpath properties.
             //
-            for ( int i = 0; i < JDKVersion.ALL.length; i++ ) { tryToSetClasspathFromLib( JDKVersion.ALL[ i ] ); }
+            for ( VMLevel vmLevel : VM_LEVELS )
+            {
+                tryToSetClasspathFromLib( vmLevel );
+            }
+
+            // Refresh our property snapshot because we may have set some more by now.
+            refreshProperties();
 
             //
-            // If the library properties were not set, the following
-            // logic will try to figure out how to set the
-            // classpath properties based on the JDK vendor.
-            //
-            // This is where you plug in vendor-specific logic.
+            // At least set the classpath property corresponding to the currently running VM,
+            // if it is not already set.
             //
-            jdkVendor = getProperty(JDK_VENDOR, "");
+            VMLevel  vmLevel = findVMLevel();
+            String  currentClasspathPropertyName = vmLevel.getClasspathPropertyName();
 
-            if (  usingMacOSXjdk( jdkVendor ) ) { setForAppleJDKs(); }
-            else if ( usingIBMjdk( jdkVendor ) ) { setForIbmJDKs(); }
-            else if ( usingOracleJDK( jdkVendor ) ) { setForOracleJDKs(); }
-            else {
-                // We don't know anything about this vendor. Print a warning
-                // message and try to continue.
-                echo("Unrecognized VM vendor: '" + jdkVendor + "'");
-                echo("An attempt to configure the required JDKs will be made," +
-                        " but the build may fail.");
-                echo("In case of problems:\n" +
-                        "  - consult BUILDING.html and set the required " +
-                        "properties manually\n" +
-                        "  - set the property printCompilerProperties to true " +
-                        "and ask the Derby development community for help\n" +
-                        "    (please provide the debug output from running ant)"
-                        );
-                setForMostJDKsJARInspection( JDKVersion.getOracleDirectoryNameSeeds() );
-                setForMostJDKs( JDKVersion.getOracleDirectoryNameSeeds() );
+            if ( !isSet( currentClasspathPropertyName ) )
+            {
+                setFromCurrentVM( vmLevel );
             }
         } catch (Throwable t)
         {
@@ -496,679 +285,68 @@ public class PropertySetter extends Task
         //
         refreshProperties();
 
-        //
-        // We now allow J14CLASSPATH to not be set. If a 1.4 JDK can't be found,
-        // then the calling script will set J14CLASSPATH, based on J15CLASSPATH.
-        //
-
-        // Require at least one version which supports generics.
-        requireGenerics();
-    }
-
-    /////////////////////////////////////////////////////////////////////////
-    //
-    //  SET PROPERTIES FOR Apple JDK
-    //
-    /////////////////////////////////////////////////////////////////////////
-
-    /**
-     * <p>
-     * Set the properties needed to compile using the Apple-supplied JDKs
-     * </p>
-     */
-    private void    setForAppleJDKs()
-        throws Exception
-    {
-        String[]    defaultLibPropertyValues = new String[ JDKVersion.ALL.length ];
-        for ( int i = 0; i < JDKVersion.ALL.length; i++ )
-        {
-            defaultLibPropertyValues[ i ] = getProperty( JDKVersion.ALL[ i ].getLibPropertyName() );
-        }
-
-        // Obtain a list of all JDKs available to us, then specify which one to
-        // use for the different versions we require.
-        List<JDKInfo> jdks = locateAppleJDKs(getJdkSearchPath());
-        debug("\nSelecting JDK candidates:");
-        for ( int i = 0; i < JDKVersion.ALL.length; i++ )
-        {
-            if ( defaultLibPropertyValues[ i ] == null )
-            {
-                JDKVersion  currentJDK = JDKVersion.ALL[ i ];
-                defaultLibPropertyValues[ i ] = getJreLib( jdks, currentJDK.getOracleDirectoryNameSeed(), jdkVendor );
-            }
-        }
-
-        defaultSetter( defaultLibPropertyValues );
+        // Require that at least one of the properties is set.
+        requireAtLeastOneProperty();
     }
-    
-    /////////////////////////////////////////////////////////////////////////
-    //
-    //  SET PROPERTIES FOR IBM JDKs
-    //
-    /////////////////////////////////////////////////////////////////////////
 
-    /**
-     * <p>
-     * Set the properties needed to compile using the IBM JDKs
-     * </p>
-     */
-    private void    setForIbmJDKs()
-        throws Exception
-    {
-        setForMostJDKsJARInspection( JDKVersion.getIBMDirectoryNameSeeds() );
-        setForMostJDKs( JDKVersion.getIBMDirectoryNameSeedWithoutPeriods() );
-    }
-
-    /////////////////////////////////////////////////////////////////////////
-    //
-    //  SET PROPERTIES FOR Oracle JDKs
-    //
-    /////////////////////////////////////////////////////////////////////////
-
-    /**
-     * <p>
-     * Set the properties needed to compile using the Oracle JDKs. This
-     * has been tested on Linux and SunOS.
-     * </p>
-     */
-    private void setForOracleJDKs()
-        throws Exception
-    {
-        setForMostJDKsJARInspection( JDKVersion.getOracleDirectoryNameSeeds() );
-        setForMostJDKs( JDKVersion.getOracleDirectoryNameSeeds() );
-    }
-    
     /////////////////////////////////////////////////////////////////////////
     //
-    //  JDK HEURISTICS
+    //  SET FROM THE CURRENT VM
     //
     /////////////////////////////////////////////////////////////////////////
 
     /**
-     * Sets the properties needed to compile using most JDKs.
      * <p>
-     * Will search for JDK based on a list of root directories. A JDK is
-     * identified by certain files and the content of JAR file manifests.
-     */
-    private void setForMostJDKsJARInspection( String[] seeds )
-        throws Exception
-    {
-        String[]    defaultLibPropertyValues = new String[ JDKVersion.ALL.length ];
-        for ( int i = 0; i < JDKVersion.ALL.length; i++ )
-        {
-            defaultLibPropertyValues[ i ] = getProperty( JDKVersion.ALL[ i ].getLibPropertyName() );
-        }
-
-        // Obtain a list of all JDKs available to us, then specify which one to
-        // use for the different versions we require.
-        List<JDKInfo> jdks = locateMostJDKs(getJdkSearchPath());
-        debug("\nSelecting JDK candidates:");
-        for ( int i = 0; i < JDKVersion.ALL.length; i++ )
-        {
-            if ( defaultLibPropertyValues[ i ] == null )
-            {
-                defaultLibPropertyValues[ i ] = getJreLib( jdks, seeds[ i ], jdkVendor );
-            }
-        }
-
-        defaultSetter( defaultLibPropertyValues );
-    }
-
-    /**
-     * <p>
-     * Set the properties needed to compile using most JDKs
+     * Set the classpath property from the library shipped with the currently running VM.
      * </p>
      */
-    private void    setForMostJDKs( String[] seeds )
+    private void    setFromCurrentVM( VMLevel vmLevel )
         throws Exception
     {
-        List<File> jdkParents = getJdkSearchPath();
-
-        String[]    defaultLibPropertyValues = new String[ JDKVersion.ALL.length ];
-        for ( int i = 0; i < JDKVersion.ALL.length; i++ )
-        {
-            defaultLibPropertyValues[ i ] = getProperty( JDKVersion.ALL[ i ].getLibPropertyName() );
-        }
-        
-        for ( int i = 0; i < JDKVersion.ALL.length; i++ )
+        String[]    jarDirectories =
         {
-            if ( defaultLibPropertyValues[ i ] == null )
-            {
-                defaultLibPropertyValues[ i ] = searchForJreLib( jdkParents, seeds[ i ], false );
-            }
-        }
-
-        defaultSetter( defaultLibPropertyValues );
-    }
-
-    /**
-     * Search for a library directory in some likely locations.
-     *
-     * @param parents list of potential JDK parent directories
-     * @param seed search string which identifies a given JDK version
-     * @return a library directory, or <code>null</code> if not found
-     */
-    private String searchForJreLib(List<File> parents, String seed, boolean squawkIfEmpty) {
-        for (File parent : parents) {
-            String jreLib = getJreLib(parent, seed, squawkIfEmpty);
-            if (jreLib != null) {
-                return jreLib;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Get a list of potential JDK parent directories. These include the parent
-     * directory of JAVA_HOME, and possibly some system dependent directories.
-     *
-     * @return a list of potential JDK parent directories
-     */
-    private List<File> getJdkSearchPath() throws Exception {
-        ArrayList<File> searchPath = new ArrayList<File>();
-
-        // Add parent of JAVA_HOME
-        searchPath.add(getJdkParentDirectory());
-
-        String osName = System.getProperty( OPERATING_SYSTEM );
-
-        if ("SunOS".equals(osName)) {
-            // On Solaris, JDK 1.4.2 is installed under /usr/jdk, whereas JDK
-            // 5.0 and later are placed under /usr/jdk/instances. If we don't
-            // find JDK 1.4.2 in the parent of JAVA_HOME, it's worth taking a
-            // look at /usr/jdk before giving up.
-            searchPath.add(new File("/usr/jdk"));
-        }
+            getJarFileDirectory( "java.lang.String" ),
+            getJarFileDirectory( "java.util.Vector" ),  // needed for building classes against IBM JDK 7
+        };
 
-        return searchPath;
+        setClasspathFromLib( vmLevel, jarDirectories );
     }
 
     /**
      * <p>
-     * Get the parent directory of JAVA_HOME
-     * </p>
-     */
-    private File    getJdkParentDirectory()
-        throws Exception
-    {
-        String  javaHome = getProperty( JAVA_HOME );
-        
-        // slice off the jdk1.5.0_u13/jre. ant seems to tack the "/jre" onto
-        // the end of what the shell thinks $JAVA_HOME is:
-        
-        File    javaHomeDir = new File( javaHome );
-        File    ancestor = getParent( getParent( javaHomeDir ) );
-
-        if ( ancestor == null )
-        {
-            echo( "JAVA_HOME directory '" + javaHome + "' does not have a grandparent directory sitting above all of the JDKs." );
-        }
-        verbose("jdkParent derived from '" + javaHome + "': '" +
-                ancestor.getPath() + "'");
-        return ancestor;
-    }
-    
-    /**
-     * <p>
-     * Get a file's parent directory. Return null if there is no parent directory.
+     * Get the name of the directory holding the jar file which contains the passed-in class name.
      * </p>
      */
-    private File    getParent( File file )
+    private String  getJarFileDirectory( String className )
         throws Exception
     {
-        if ( file == null ) { return null; }
-        if ( !file.exists() ) { return null; }
-        
-        return file.getParentFile();
-    }
-
-
-    /**
-     * <p>
-     * Get the path name of the library directory in the latest version of this jre
-     * </p>
-     */
-    private String    getJreLib( File jdkParentDirectory, String jdkName, boolean squawkIfEmpty )
-        throws BuildException
-    {
-        if ( jdkParentDirectory == null ) { return null; }
-        
-        File[]      versions = jdkParentDirectory.listFiles( new DirContainsStringFilter( jdkName ) );
-        int         count = versions.length;
-
-        if ( count <= 0 )
-        {
-            if ( squawkIfEmpty )
-            { echo( "Directory '" + jdkParentDirectory.getAbsolutePath() + "' does not have any child directories containing the string '" + jdkName + "'." ); }
-            
-            return null;
-        }
-
-        Arrays.sort( versions );
-
-        // Search the versions backwards (highest first) until a usable one
-        // is found.
-        for (int i = count - 1; i >= 0; i--) {
-            File javadir = versions[i];
-
-            if (isExcludedJDK(javadir)) {
-                // This directory contains a JDK that we don't expect to
-                // work. Skip it.
-                continue;
-            }
+        Class   klass = Class.forName( className );
+        String  fileName = klass.getName().replace( '.', '/' ) + ".class";
+        ClassLoader classLoader = klass.getClassLoader();
+        URL     classURL = classLoader.getSystemResource( fileName );
+        String classLocation = URLDecoder.decode( classURL.toString(), System.getProperty( "file.encoding" ) );
 
-            String libStub = javadir.getAbsolutePath();
-
-            //
-            // If the selected java dir is a JDK rather than a JRE, then it
-            // will have a jre subdirectory
-            //
-            File jreSubdirectory = new File(javadir, "jre");
-            if (jreSubdirectory.exists()) {
-                libStub = libStub + File.separator + "jre";
-            }
-
-            libStub = libStub + File.separator + "lib";
-
-            return libStub;
-        }
-
-        return null;
-    }
-
-    /**
-     * Check if the specified directory should be excluded when searching for
-     * a usable set of Java libraries.
-     *
-     * @param dir the directory to check
-     * @return {@code true} if the libraries in the directory should not be
-     * used for constructing a compile classpath
-     */
-    private static boolean isExcludedJDK(File dir) {
-        // DERBY-5189: The libraries that come with GCJ lack some classes in
-        // the javax.management.remote package and cannot be used for building
-        // Derby.
-        return dir.getName().toLowerCase().contains("gcj");
-    }
-
-    // JDK heuristics based on inspecting JARs.
-    //
-    private List<JDKInfo> locateAppleJDKs(List<File> jdkParentDirectories) {
-        ArrayList<JDKInfo> jdks = new ArrayList<JDKInfo>();
-        if (jdkParentDirectories == null) {
-            debug("WARNING: No JDK parent directories specified.");
-            return jdks;
-        }
-
-        debug("\nLocating Apple JDKs:");
-
-        final FileFilter jdkFilter = new JDKRootFileFilter();
-        for (File jdkParentDirectory : jdkParentDirectories) {
-            verbose("locating JDKs in '" + jdkParentDirectory + "'");
-            // Limit the search to the directories in the parent directory.
-            // Don't descend into sub directories.
-            File[] possibleJdkRoots = jdkParentDirectory.listFiles(jdkFilter);
-            for (File f : possibleJdkRoots) {
-                verbose("checking root '" + f + "'");
-
-                JDKInfo jdk = findAppleJDK6( f );               
-                if ( jdk == null ) { jdk = findAppleJDK7( f ); }
-
-                if ( jdk != null ) { jdks.add(jdk); }
-            }
-        }
-        verbose("located " + jdks.size() + " JDKs in total");
-        return jdks;
-     }
-
-    /** Find the JDKInfo for an Apple JDK at rev level 6 or earlier */
-    private JDKInfo findAppleJDK6( File root )
-    {
-        boolean directoriesExist = requireDirectories
-            (
-             new File[]
-             {
-                 new File(root, APPLE_CLASSES_DIR),
-                 new File(root, APPLE_COMMANDS_DIR),
-                 new File(root, APPLE_HOME_DIR),
-                 new File(root, APPLE_LIBRARIES_DIR),
-                 new File(root, APPLE_RESOURCES_DIR)
-             }
-             );
-        if ( !directoriesExist ) { return null; }
-        
-        File rtArchive = new File(root,new File(APPLE_CLASSES_DIR, "classes.jar").getPath());
-        if (!rtArchive.exists()) {
-            debug("Missing JAR: " + rtArchive);
-            // Bail out, we only understand JDKs that have a
-            // "Classes/classes.jar".
-            return null;
-        }
-        // Get implementation version from the manifest.
-        Manifest mf;
-        try {
-            JarFile rtJar = new JarFile(rtArchive);
-            mf = rtJar.getManifest();
-        } catch (IOException ioeIgnored) {
-            // Obtaining the manifest failed for some reason.
-            // If in debug mode, let the user know.
-            debug("Failed to obtain manifest for " +
-                  rtArchive.getAbsolutePath() + ": " +
-                  ioeIgnored.getMessage());
-            return null;
-        }
-        
-        return inspectJarManifest(mf, root);
-    }
-    /** Return true if all of the required directories are found */
-    private boolean requireDirectories( File[] requiredDirs )
-    {
-        for (File reqDir : requiredDirs) {
-            if (!reqDir.exists()) {
-                debug("Missing JDK directory: " +
-                      reqDir.getAbsolutePath());
-                return  false;
-            }
-        }
-        
-        return true;
-    }
-
-    /** Find the JDKInfo for an Apple JDK at rev level 7 */
-    private JDKInfo findAppleJDK7( File root )
-    {
-        boolean directoriesExist = requireDirectories
+        //
+        // The classLocation looks something like this:
+        //
+        // jar:file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar!/java/lang/String.class
+        //
+        // To get the name of the jar file which contains the String class, we need to strip
+        // off everything up to and including the "file:" token and everything starting with
+        // and following the "!" token.
+        //
+        String jarFileName = classLocation.substring
             (
-             new File[]
-             {
-                 new File(root, APPLE_LIB_DIR),
-                 new File(root, APPLE_JRE_DIR)
-             }
+             classLocation.indexOf( FILE_TOKEN ) + FILE_TOKEN.length(),
+             classLocation.indexOf( JAR_TERMINATOR_TOKEN )
              );
-        if ( !directoriesExist ) { return null; }
-        
-        File rtArchive = new File(root,new File(APPLE_JDK7_JRE_LIB_DIR, "rt.jar").getPath());
-        if (!rtArchive.exists()) {
-            debug("Missing JAR: " + rtArchive);
-            // Bail out, we only understand JDKs that have a
-            // "jre/lib/rt.jar".
-            return null;
-        }
-        // Get implementation version from the manifest.
-        Manifest mf;
-        try {
-            JarFile rtJar = new JarFile(rtArchive);
-            mf = rtJar.getManifest();
-        } catch (IOException ioeIgnored) {
-            // Obtaining the manifest failed for some reason.
-            // If in debug mode, let the user know.
-            debug("Failed to obtain manifest for " +
-                  rtArchive.getAbsolutePath() + ": " +
-                  ioeIgnored.getMessage());
-            return null;
-        }
-        
-        return inspectJarManifest(mf, root);
-    }
-
-    /**
-     * Searches for JDKs in the specified directories.
-     *
-     * @param jdkParentDirectories a list of parent directories to search in
-     * @return A list containing information objects for JDKs found on the
-     *      system. If no JDKs were found, the list will be empty.
-     */
-    private List<JDKInfo> locateMostJDKs(List<File> jdkParentDirectories) {
-        ArrayList<JDKInfo> jdks = new ArrayList<JDKInfo>();
-        if (jdkParentDirectories == null) {
-            return jdks;
-        }
-        debug("\nLocating JDKs:");
-
-        File jreLibRel = new File("jre", "lib");
-        String[] jarsRelative = new String[] {
-                // Special cases for IBM JDKs.
-                new File(jreLibRel, "core.jar").getPath(),
-                new File(jreLibRel, "vm.jar").getPath(),
-                // Default JAR file to look for, used be most JDKs.
-                new File(jreLibRel, "rt.jar").getPath(),
-            };
-        final FileFilter jdkFilter = new JDKRootFileFilter();
-        for (File jdkParentDirectory : jdkParentDirectories) {
-            // Limit the search to the directories in the parent directory.
-            // Don't descend into sub directories.
-            File[] possibleJdkRoots = jdkParentDirectory.listFiles(jdkFilter);
-            for (File f : possibleJdkRoots) {
-                File rtArchive = new File(f, jreLibRel.getPath());
-                if (!rtArchive.exists()) {
-                    // Bail out, we only understand JDKs that have a jre/lib dir
-                    continue;
-                }
-                // Look for the various JARs that identify a JDK and see if a
-                // implementation version is specified in the manifest.
-                for (String jar : jarsRelative) {
-                    rtArchive = new File(f, jar);
-                    if (rtArchive.exists()) {
-                        // Jar found.
-                        Manifest mf;
-                        try {
-                            JarFile rtJar = new JarFile(rtArchive);
-                            mf = rtJar.getManifest();
-                        } catch (IOException ioeIgnored) {
-                            // Obtaining the manifest failed for some reason.
-                            // If in debug mode, let the user know.
-                            debug("Failed to obtain manifest for " +
-                                        rtArchive.getAbsolutePath() + ": " +
-                                        ioeIgnored.getMessage());
-                            continue;
-                        }
-                        JDKInfo jdk = inspectJarManifest(mf, f);
-                        if (jdk != null) {
-                            jdks.add(jdk);
-                            break;
-                        }
-                    }
-                    rtArchive = null; // Reset
-                }
-                if (rtArchive == null) {
-                    // We didn't find any of the jars we were looking for, or
-                    // the manifests didn't contain an implementation version.
-                    // Continue with the next potential JDK root.
-                    continue;
-                }
-            }
-         }
-        return jdks;
-     }
-
-    /**
-     * Inspects the specified manifest to obtain information about the JDK.
-     *
-     * @param mf manifest from a JDK jar file
-     * @param jdkHome the home directory of the JDK
-     * @return An information object for the JDK, or {@code null} if no
-     *      information was found.
-     */
-    private JDKInfo inspectJarManifest(Manifest mf, File jdkHome) {
-        // The manifest may be null, as it is optional.
-        if (mf == null) {
-            verbose("no manifest found for JDK in '" + jdkHome + "'");
-            return null;
-        }
-        JDKInfo info = new JDKInfo(
-            mf.getMainAttributes().getValue("Implementation-Vendor"),
-            mf.getMainAttributes().getValue("Specification-Version"),
-            mf.getMainAttributes().getValue("Implementation-Version"),
-            jdkHome.getAbsolutePath());
-        debug("found JDK: " + info);
-        return info;
-    }
-
-    /**
-     * Returns the path to the most suitable JDK found on the system.
-     * <p>
-     * The selection is taken based on the specification version and potentially
-     * the JDK vendor.
-     *
-     * @param jdks the JDKs we can choose from
-     * @param specificationVersion the specification version we want, i.e.
-     *      "1.4" or "1.6". {@code null} allows all valid versions.
-     * @param vendor the vendor to prefer, if any
-     * @return The path to the chosen JDK, or {@code null} if no suitable JDK
-     *      was found.
-     */
-    private String getJreLib(List<JDKInfo> jdks,
-            String specificationVersion, String vendor) {
-        // If we have no candidate JDKs, just return null at once.
-        if (jdks == null || jdks.isEmpty()) {
-            debug("No candidate JDKs (version '" + specificationVersion + "')");
-            return null;
-        }
-        ArrayList<JDKInfo> candidates = new ArrayList<JDKInfo>();
-        ArrayList<String> versions = new ArrayList<String>();
-        // Get the JDKs with the requested specification version.
-        // Because some vendors are unable to correctly specify the meta data,
-        // we have to look at the implementation version only.
-        for (JDKInfo jdk : jdks) {
-            String implVersion = jdk.implementationVersion;
-            if (isValidVersion(implVersion, specificationVersion)) {
-                candidates.add(jdk);
-                if (!versions.contains(implVersion)) {
-                    versions.add(implVersion);
-                }
-            }
-        }
-        // See if we found any suitable JDKs.
-        if (candidates.isEmpty()) {
-            debug("INFO: No valid JDK with specification " +
-                        "version '" + specificationVersion + "' found");
-            return null;
-        }
 
-        // Sort and reverse the version list (highest first).
-        Collections.sort(versions);
-        Collections.reverse(versions);
-
-        // Try to find a JVM of the same vendor first. If that fails, return
-        // the highest version suitable JDK from any vendor.
-        String[] targetVendors = new String[] {
-                vendor,
-                null // insignificant, ignores vendor and compares version only
-            };
-        for (String targetVendor : targetVendors) {
-            for (String version : versions) {
-                for (JDKInfo jdk : candidates) {
-                    if (jdk.implementationVersion.equals(version) &&
-                            isSameVendor(targetVendor, jdk.vendor)) {
-                        debug("Candidate JDK for specification version " +
-                                specificationVersion + " (vendor " +
-                                (targetVendor == null ? "ignored"
-                                                      : jdkVendor) +
-                                "): " + jdk);
-                        return constructJreLibPath(jdk).getAbsolutePath();
-                    }
-                }
-            }
-        }
-        return null;
-    }
+        File    jarFile = new File( jarFileName );
+        File    jarDirectory = jarFile.getParentFile();
 
-    /**
-     * Constructs the path to the JRE library directory for the given JDK.
-     *
-     * @param jdk the target JDK
-     * @return A <tt>File</tt> object pointing to the JRE library directory.
-     */
-    private static File constructJreLibPath(JDKInfo jdk) {
-        String relLib;
-        if (jdk.vendor.startsWith(JDK_APPLE)) {
-            relLib = new File(APPLE_CLASSES_DIR).getPath();
-        } else {
-            relLib = new File("jre", "lib").getPath();
-        }
-        return new File(jdk.path, relLib);
-    }
-
-    /**
-     * Tells if the specified implementation version is representing a valid JDK
-     * version and if it satisfies the specification version.
-     *
-     * @param implVersion the version string to check
-     * @param specVersion the specification version to satisfy
-     * @return {@code true} if a valid version, {@code false} if not.
-     */
-    private boolean isValidVersion(String implVersion,
-                                          String specVersion) {
-        // Don't allow null as a version.
-        if (implVersion == null) {
-            debug("JDK ignored, no impl version found");
-            return false;
-        }
-        // Don't allow early access versions.
-        // This rule should at least match Sun EA versions.
-        //        if ( implVersion.contains("ea") ) {
-        //            debug("JDK with version '" + implVersion + "' ignored: " +
-        //                    "early access");
-        //            return false;
-        //        }
-
-        // See if the implementation version matches the specification version.
-        if (specVersion == null) {
-            return true;
-        }
-        // The current way of comparing the versions, is to check if the
-        // specification version can be found as part of the implementation
-        // version. For instance spec=1.6, matches impl=1.6.0_14.
-        return implVersion.contains(specVersion);
-    }
-
-    /**
-     * Tells if the two vendor names are representing the same vendor.
-     *
-     * @param targetVendor target vendor name, or {@code null} or whitespace /
-     *      empty string if insignificant
-     * @param vendor the candidate vendor name to compare with
-     * @return {@code true} if considered the same or {@code targetVendor} is
-     *      {@code null}, {@code false} if not.
-     */
-    private static boolean isSameVendor(String targetVendor, String vendor) {
-        // If there is no target vendor, return true.
-        if (targetVendor == null || targetVendor.trim().equals("")) {
-            return true;
-        }
-        // If we have a target vendor, but no vendor name to compare with,
-        // always return false.
-        if (vendor == null || vendor.trim().equals("")) {
-            return false;
-        }
-        // Normalize both the vendor names and compare.
-        String target = normalizeVendorName(targetVendor);
-        String candidate = normalizeVendorName(vendor);
-        // Implement special cases here, if required.
-        return candidate.equals(target);
-    }
-
-    /**
-     * Normalizes the vendor name for the purpose of vendor name matching.
-     *
-     * @param vendorName the vendor name as reported by the VM or similar
-     * @return A normalized vendor name suitable for vendor name matching.
-     */
-    private static String normalizeVendorName(String vendorName) {
-        // Normalize the vendore names returned by Apple JDKs.
-        if (vendorName.equals("Apple Inc.")) {
-            // The running VM says "Apple Inc.", the JAR manifest says
-            // "Apple Computer, Inc.".
-            vendorName = "Apple Computer, Inc.";
-        }
-        // The vendor name specified in the jar file manifest differes from the
-        // one return by the JVM itself for the Sun JDKs. For instance:
-        //  - from JAR:        Sun Microsystems, Inc.
-        //  - from running VM: Sun Microsystems Inc.
-        // (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6851869)
-        return vendorName.replaceAll(",", "");
+        return jarDirectory.getAbsolutePath();
     }
-
+    
     /////////////////////////////////////////////////////////////////////////
     //
     //  PROPERTY MINIONS
@@ -1177,55 +355,20 @@ public class PropertySetter extends Task
 
     /**
      * <p>
-     * Default property setter. Sets the lib properties to the passed-in values
-     * and sets the classpath properties to the lists of jars in the lib
-     * directories. If the library properties are already set, the already-set
-     * values will override the defaults that are passed in to this method.
-     * </p>
-     */
-    private void    defaultSetter( String[] defaultLibPropertyValues )
-        throws  BuildException
-    {
-        if ( defaultLibPropertyValues.length != JDKVersion.ALL.length )
-        {
-            throw new BuildException
-                (
-                 "The PropertySetter program does not understand this platform. " +
-                 "PropertySetter should be setting properties for " + JDKVersion.ALL.length + " JDKs. " +
-                 "However, PropertySetter is instead trying to set properties for " + defaultLibPropertyValues.length + " JDKs."
-                 );
-        }
-
-        for ( int i = 0; i < JDKVersion.ALL.length; i++ )
-        {
-            JDKVersion  currentVersion = JDKVersion.ALL[ i ];
-            String  libPropertyName = currentVersion.getLibPropertyName();
-            String  classpathPropertyName = currentVersion.getClasspathPropertyName();
-            String  libPropertyValue = getProperty( libPropertyName, defaultLibPropertyValues[ i ] );
-            
-            setClasspathFromLib( classpathPropertyName, libPropertyValue, false );
-        }
-
-        // Refresh the properties snapshot to reflect the latest changes.
-        refreshProperties();
-    }
-    
-    /**
-     * <p>
      * Try to set a classpath from a corresponding lib property.
      * </p>
      */
-    private void    tryToSetClasspathFromLib( JDKVersion version )
+    private void    tryToSetClasspathFromLib( VMLevel vmLevel )
         throws BuildException
     {
-        String  libPropertyName = version.getLibPropertyName();
-        String  classpathPropertyName = version.getClasspathPropertyName();
+        String  libPropertyName = vmLevel.getLibPropertyName();
+        String  classpathPropertyName = vmLevel.getClasspathPropertyName();
         String  libPropertyValue = getProperty( libPropertyName );
         
         if ( libPropertyValue != null )
         {
             debug( singleQuote( libPropertyName ) + " explicitly set to " + singleQuote( libPropertyValue ) );
-            setClasspathFromLib( classpathPropertyName, libPropertyValue, true );
+            setClasspathFromLib( vmLevel, new String[] { libPropertyValue } );
         }
     }
     
@@ -1238,64 +381,49 @@ public class PropertySetter extends Task
      * Throws a BuildException if there's a problem.
      * </p>
      */
-    private void    setClasspathFromLib( String classpathProperty, String libraryDirectory, boolean squawkIfEmpty )
+    private void    setClasspathFromLib( VMLevel vmLevel, String[] libraryDirectories )
         throws BuildException
     {
-        String      classpath = getProperty( classpathProperty );
+        String      classpathPropertyName = vmLevel.getClasspathPropertyName();
+        String      classpath = getProperty( classpathPropertyName );
 
         // nothing to do if the property is already set. we can't override it.
         if ( classpath != null ) { return; }
 
         // refuse to set certain properties
-        if ( shouldNotSetClasspathProperty( classpathProperty ) ) { return; }
+        if ( shouldNotSetClasspathProperty( vmLevel ) ) { return; }
 
-        String      jars = listJars( libraryDirectory, squawkIfEmpty );
+        String      jars = listJars( libraryDirectories );
 
-        if ( squawkIfEmpty && (jars == null) )
+        if ( jars == null )
         {
-            throw couldntSetProperty( classpathProperty );
+            throw couldntSetProperty( classpathPropertyName );
         }
 
-        if ( jars != null ) { setProperty( classpathProperty, jars ); }
+        if ( jars != null ) { setProperty( classpathPropertyName, jars ); }
     }
 
     /**
      * <p>
-     * List all of the jars in a directory in lexicographical order of
+     * List all of the jars in the passed-in directories in lexicographical order of
      * filenames in a format suitable for using in a classpath.
      * Returns null if the directory string does not identify
      * a valid directory.
      * </p>
      */
-    private String    listJars( String dirName, boolean squawkIfEmpty )
+    private String    listJars( String[] dirNames )
     {
-        if ( dirName == null ) { return null; }
-
-        File    dir = new File( dirName );
-
-        if ( !dir.exists() )
-        {
-            if ( squawkIfEmpty) { echo( "Directory " + dirName + " does not exist." ); }
-            return null;
-        }
-        if ( !dir.isDirectory() )
-        {
-            if ( squawkIfEmpty) { echo( dirName + " is not a directory." ); }
-            return null;
-        }
+        HashSet<File>   fileSet = new HashSet<File>();
 
-        File[]  jars = dir.listFiles( new JarFilter() );
+        for ( String dirName : dirNames ) { listJars( dirName, fileSet ); }
 
+        File[]  jars = new File[ fileSet.size() ];
+        fileSet.toArray( jars );
+        
         Arrays.sort( jars );
         // Guard against empty JDK library directories.
-        // Can happen if the JDK is uninstalled when there are custom libs in
-        // the jre/lib/ext directory.
-        // This issue only affects the old algorithm for finding JDKs
-        // (looks for specific directory names), which is used as a fallback
-        // when the new algorithm (looks for specific JAR files) doesn't find
-        // the required JDKs.
         if (jars.length == 0) {
-            debug("INFO: Empty or invalid JDK lib directory: " + dir);
+            debug("INFO: Empty or invalid JDK lib directory: " + Arrays.asList( dirNames ).toString() );
             return null;
         }
 
@@ -1314,6 +442,36 @@ public class PropertySetter extends Task
 
     /**
      * <p>
+     * List all of the jars in the passed-in directory. Add them to
+     * the evolving HashSet.
+     * </p>
+     */
+    private void    listJars( String dirName, HashSet<File> map )
+    {
+        debug( "Listing jars in directory " + dirName );
+        
+        if ( dirName == null ) { return; }
+
+        File    dir = new File( dirName );
+
+        if ( !dir.exists() )
+        {
+            echo( "Directory " + dirName + " does not exist." );
+            return;
+        }
+        if ( !dir.isDirectory() )
+        {
+            echo( dirName + " is not a directory." );
+            return;
+        }
+
+        File[]  jars = dir.listFiles( new JarFilter() );
+
+        for ( File jar : jars ) { map.add( jar ); }
+    }
+
+    /**
+     * <p>
      * Return true if a property is set.
      * </p>
      */
@@ -1377,14 +535,13 @@ public class PropertySetter extends Task
      */
     private void  checkForProblematicSettings()
     {
-        for ( JDKVersion current : JDKVersion.ALL )
+        for ( VMLevel vmLevel : VM_LEVELS )
         {
-            String  classpathPropertyName = current.getClasspathPropertyName();
-            String  libPropertyName = current.getLibPropertyName();
-            String  baseJavaVersion = current.getBaseJavaVersion();
+            String  classpathPropertyName = vmLevel.getClasspathPropertyName();
+            String  libPropertyName = vmLevel.getLibPropertyName();
 
             if (
-                shouldNotSetClasspathProperty( classpathPropertyName ) &&
+                shouldNotSetClasspathProperty( vmLevel ) &&
                 ( isSet( classpathPropertyName ) || isSet( libPropertyName ) )
                 )
             {
@@ -1393,7 +550,7 @@ public class PropertySetter extends Task
                 (
                  "\nThe build raises version mismatch errors when using a " +
                  javaVersion + " compiler with libraries from a later JDK.\n" +
-                 "Please either use a " + baseJavaVersion + " (or later) compiler or do not " +
+                 "Please either use a later compiler or do not " +
                  "set the '" +  classpathPropertyName + "' and '" + libPropertyName +
                  "' variables.\n"
                  );
@@ -1403,65 +560,39 @@ public class PropertySetter extends Task
     
     /**
      * <p>
-     * Returns true if the given classpath property should not be set.
+     * Returns true if the corresponding classpath property should not be set.
      * </p>
      */
-    private boolean shouldNotSetClasspathProperty( String classpathPropertyName )
+    private boolean shouldNotSetClasspathProperty( VMLevel candidateVMLevel )
     {
         //
         // A Java compiler raises version mismatch errors when used
         // with libraries supplied by a later version of Java.
         //
-        String  javaVersion = getProperty( JAVA_VERSION );
 
-        JDKVersion  compilerVersion = JDKVersion.matchJREversion( javaVersion );
-        JDKVersion  propertyVersion = JDKVersion.matchClasspathPropertyName( classpathPropertyName );
+        VMLevel  compilerVMLevel = findVMLevel();
 
-        if ( compilerVersion == null )
-        {
-            throw new BuildException
-                (
-                 "\nCannot find a JDKVersion matching java.version = " + javaVersion + "\n"
-                 );
-        }
-        if ( propertyVersion == null )
-        {
-            throw new BuildException
-                (
-                 "\nCannot find a JDKVersion matching the classpath property named = " +classpathPropertyName + "\n"
-                 );
-        }
-
-        if ( compilerVersion.compareTo( propertyVersion ) < 0 ) { return true; }
-        else { return false; }
-    }
-    
-    /**
-     * Return true if we are using a JDK for Mac OS X.
-     */
-    private static boolean usingMacOSXjdk(String jdkVendor)
-    {
-        return jdkVendor.startsWith( JDK_APPLE ) || MAC_OSX.equals( System.getProperty( OPERATING_SYSTEM ) );
+        return ( compilerVMLevel.compareTo( candidateVMLevel ) < 0 );
     }
 
     /**
-     * <p>
-     * Return true if we are using an IBM JDK.
-     * </p>
+     * Find the VM level corresponding to the java.version property.
      */
-    private boolean usingIBMjdk( String jdkVendor )
+    private VMLevel  findVMLevel()   throws BuildException
     {
-        return JDK_IBM.equals( jdkVendor );
-    }
+        String  javaVersion = getProperty( JAVA_VERSION );
 
-    /**
-     * Return true if we are using an Oracle JDK.
-     */
-    private static boolean usingOracleJDK(String vendor)
-    {
-        return JDK_SUN.equals(vendor) || JDK_ORACLE.equals(vendor);
-    }
+        for ( VMLevel candidateLevel : VM_LEVELS )
+        {
+            if ( candidateLevel.matchesJavaVersion( javaVersion ) ) { return candidateLevel; }
+        }
 
+        throw new BuildException
+            (
+             "\nPropertySetter does not know how to handle java.version = " + javaVersion + "\n"
+             );
+    }
+    
     /**
      * <p>
      * Get a property value. Returns null if the property is not set.
@@ -1526,23 +657,20 @@ public class PropertySetter extends Task
 
     /**
      * <p>
-     * Require that at least one of the JDKs supports generics.
+     * Require that at least one of the classpath properties is set.
      * </p>
      */
-    private void  requireGenerics()
+    private void  requireAtLeastOneProperty()
         throws BuildException
     {
-        ArrayList<JDKVersion>   genericsSupporters = JDKVersion.genericsSupporters();
-        int             count = genericsSupporters.size();
-        String[]    properties = new String[ count ];
-        int         idx = 0;
-
-        for ( JDKVersion version : genericsSupporters )
+        String[]    properties = new String[ VM_LEVELS.length ];
+        
+        for ( int i = 0; i < VM_LEVELS.length; i++ )
         {
-            String  propertyName = version.getClasspathPropertyName();
-            if ( getProperty( propertyName ) != null ) { return; }
+            String  classpathPropertyName = VM_LEVELS[ i ].getClasspathPropertyName();
+            if ( isSet( classpathPropertyName ) ) { return; }
 
-            properties[ idx++ ] = propertyName;
+            properties[ i ] = classpathPropertyName;
         }
 
         throw couldntSetProperty( properties );
@@ -1550,17 +678,6 @@ public class PropertySetter extends Task
 
     /**
      * <p>
-     * Require that a property be set.
-     * </p>
-     */
-    private void  requireProperty( String property )
-        throws BuildException
-    {
-        if ( getProperty( property ) == null ) { throw couldntSetProperty( property ); }
-    }
-
-    /**
-     * <p>
      * Object that we couldn't set some properties.
      * </p>
      */
@@ -1595,24 +712,11 @@ public class PropertySetter extends Task
         appendProperty( buffer, JAVA_HOME );
         appendProperty( buffer, JAVA_VERSION );
         appendProperty( buffer, OPERATING_SYSTEM );
-        for ( int i = 0; i < JDKVersion.ALL.length; i++ )
+        for ( int i = 0; i < VM_LEVELS.length; i++ )
         {
-            appendProperty( buffer, JDKVersion.ALL[ i ].getLibPropertyName() );
-        }
-        // Build a string of the search path, which may contain multiple values.
-        buffer.append("jdkSearchPath = ");
-        try {
-            List<File> paths = getJdkSearchPath();
-            for (File path : paths) {
-                buffer.append(path.getPath()).append(", ");
-            }
-            // Remove the trailing ", ".
-            buffer.deleteCharAt(buffer.length() -1);
-            buffer.deleteCharAt(buffer.length() -1);
-
-        } catch (Exception e) {
-            buffer.append("unknown (reason: ").append(e.getMessage().trim()).
-                   append(")");
+            VMLevel  vmLevel = VM_LEVELS[ i ];
+            appendProperty( buffer, vmLevel.getLibPropertyName() );
+            appendProperty( buffer, vmLevel.getClasspathPropertyName() );
         }
         buffer.append("\n");
 
@@ -1660,39 +764,6 @@ public class PropertySetter extends Task
         }
     }
 
-    /**
-     * A custom filter that accepts only directories and which in addition tries
-     * to ignore duplicates (i.e. symbolic links pointing into the same
-     * directory).
-     */
-    private static class JDKRootFileFilter
-            implements FileFilter {
-
-        private List<String> canonicalRoots = new ArrayList<String>();
-
-        /** Accepts only directories. */
-        public boolean accept(File pathname) {
-            if (pathname.isDirectory()) {
-                // Avoid processing the same JDK multiple times if possible.
-                try {
-                    String canonicalRoot = pathname.getCanonicalPath();
-                    boolean accept = !canonicalRoots.contains(canonicalRoot);
-                    if (accept) {
-                        canonicalRoots.add(canonicalRoot);
-                    }
-                    verbose((accept ? "candidate" : "duplicate") + " '" +
-                            pathname + "' -> '" + canonicalRoot + "'");
-                    return accept;
-                } catch (IOException ioe) {
-                    // Ignore exception, just accept the directory.
-                    verbose("file operation failed: " + ioe.getMessage());
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-
     private String  singleQuote( String raw )
     {
         return "'" + raw + "'";

Modified: db/derby/code/trunk/java/client/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/build.xml (original)
+++ db/derby/code/trunk/java/client/build.xml Tue Nov  8 14:03:55 2011
@@ -64,7 +64,7 @@
       excludes="**/*40.java" 
       destdir="${out.dir}">
       <classpath>
-          <pathelement path="${java14compile.classpath}"/>
+          <pathelement path="${java15compile.classpath}"/>
       </classpath>
     </javac>
 </target>

Modified: db/derby/code/trunk/java/demo/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/demo/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/demo/build.xml (original)
+++ db/derby/code/trunk/java/demo/build.xml Tue Nov  8 14:03:55 2011
@@ -50,7 +50,7 @@
       destdir="${out.dir}"
       includes="Simple*">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
     </javac>
     <javac
@@ -69,7 +69,7 @@
       includes="nserverdemo/**"
       excludes="nserverdemo/Simple*">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
     </javac>
     <!-- "simple" demos under java/demo/ (SimpleApp, SimpleMobileApp) -->
@@ -88,7 +88,7 @@
       destdir="${out.dir}">
       <classpath>
         <pathelement location="${javasrc.dir}"/>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
     </javac>
     <javac
@@ -106,7 +106,7 @@
       destdir="${out.dir}">
       <classpath>
         <pathelement location="${javasrc.dir}"/>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
     </javac>
     <ant target="compile" dir="toursdb"/>

Modified: db/derby/code/trunk/java/demo/toursdb/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/demo/toursdb/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/demo/toursdb/build.xml (original)
+++ db/derby/code/trunk/java/demo/toursdb/build.xml Tue Nov  8 14:03:55 2011
@@ -50,7 +50,7 @@
       srcdir="${derby.demo.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
       <include name="toursdb/insertMaps.java"/>
     </javac>

Modified: db/derby/code/trunk/java/drda/org/apache/derby/drda/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/drda/org/apache/derby/drda/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/drda/org/apache/derby/drda/build.xml (original)
+++ db/derby/code/trunk/java/drda/org/apache/derby/drda/build.xml Tue Nov  8 14:03:55 2011
@@ -57,7 +57,7 @@
       srcdir="${derby.drda.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
       <include name="${derby.dir}/drda/*.java"/>
       <exclude name="${derby.dir}/drda/NetServlet.java"/>
@@ -80,7 +80,7 @@
       destdir="${out.dir}">
       <classpath>
 	 	<pathelement location="${servlet24}"/>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
 	  <include name="${derby.dir}/drda/NetServlet.java"/>
     </javac>

Modified: db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/build.xml (original)
+++ db/derby/code/trunk/java/drda/org/apache/derby/impl/drda/build.xml Tue Nov  8 14:03:55 2011
@@ -50,7 +50,7 @@
       srcdir="${derby.drda.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
       <include name="${derby.dir}/impl/drda/DecryptionManager.java"/>
     </javac>
@@ -68,7 +68,7 @@
       srcdir="${derby.drda.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
       <include name="${derby.dir}/impl/drda/DRDAXAProtocol.java"/>
       <include name="${derby.dir}/impl/drda/DRDAXid.java"/>
@@ -88,7 +88,7 @@
       srcdir="${derby.drda.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
       <include name="${derby.dir}/impl/drda/*.java"/>
       <exclude name="${derby.dir}/impl/drda/DecryptionManager.java"/>

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/build.xml (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/build.xml Tue Nov  8 14:03:55 2011
@@ -88,7 +88,7 @@
       srcdir="${derby.engine.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
 	  <include name="${derby.dir}/${cur.dir}/BrokeredConnection.java"/>
 	  <include name="${derby.dir}/${cur.dir}/BrokeredPreparedStatement.java"/>
@@ -111,7 +111,7 @@
       srcdir="${derby.engine.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
 	  <include name="${derby.dir}/${cur.dir}/BrokeredStatement.java"/>
     </javac>
@@ -132,7 +132,7 @@
       srcdir="${derby.engine.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
 	  <include name="${derby.dir}/${cur.dir}/BrokeredConnection30.java"/>
 	  <include name="${derby.dir}/${cur.dir}/BrokeredPreparedStatement30.java"/>

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/reference/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/reference/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/reference/build.xml (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/reference/build.xml Tue Nov  8 14:03:55 2011
@@ -69,7 +69,7 @@
       srcdir="${derby.engine.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
       <include name="${derby.dir}/iapi/reference/JDBC20Translation.java"/>
       <include name="${derby.dir}/iapi/reference/JDBC30Translation.java"/>

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/crypto/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/crypto/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/crypto/build.xml (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/crypto/build.xml Tue Nov  8 14:03:55 2011
@@ -48,7 +48,7 @@
       srcdir="${derby.engine.src.dir}"
       destdir="${out.dir}">
       <classpath>
-         <pathelement path="${java14compile.classpath}"/>
+         <pathelement path="${java15compile.classpath}"/>
       </classpath>
       <include name="${derby.dir}/iapi/services/crypto/*.java"/>
     </javac>

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/store/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/store/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/store/build.xml (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/store/build.xml Tue Nov  8 14:03:55 2011
@@ -73,7 +73,7 @@
       srcdir="${derby.engine.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
       <include name="${derby.dir}/iapi/store/access/xa/*.java"/>
     </javac>

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/build.xml (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/build.xml Tue Nov  8 14:03:55 2011
@@ -52,7 +52,7 @@
       srcdir="${derby.engine.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${xmlApis};${java14compile.classpath}"/>
+        <pathelement path="${xmlApis};${java15compile.classpath}"/>
       </classpath>
       <include name="${derby.dir}/iapi/types/SqlXmlUtil.java"/>
     </javac>
@@ -91,7 +91,7 @@
       srcdir="${derby.engine.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
       <include name="${derby.dir}/iapi/types/SQLDecimal.java"/>
       <include name="${derby.dir}/iapi/types/J2SEDataValueFactory.java"/>

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/io/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/io/build.xml?rev=1199248&r1=1199247&r2=1199248&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/io/build.xml (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/io/build.xml Tue Nov  8 14:03:55 2011
@@ -71,7 +71,7 @@
       srcdir="${derby.engine.src.dir}"
       destdir="${out.dir}">
       <classpath>
-        <pathelement path="${java14compile.classpath}"/>
+        <pathelement path="${java15compile.classpath}"/>
       </classpath>
       <include name="${derby.dir}/impl/io/DirFile4.java"/>
       <include name="${derby.dir}/impl/io/DirStorageFactory4.java"/>