###############################################################################
# Copyright (c) 2007, 2019 IBM Corporation and others.
# This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################

# adjust classpaths depending on which VM's 
# are being used on this build machine. 


# some standard ones for Sun
J2SE-1.4=${env.JAVA_4_HOME}/jre/lib/rt.jar:${env.JAVA_4_HOME}/jre/lib/jsse.jar
J2SE-1.5=${env.JAVA_5_HOME}/jre/lib/rt.jar:${env.JAVA_5_HOME}/jre/lib/jsse.jar

# some standard ones for IBM's JRE
#J2SE-1.4=${env.JAVA_4_HOME}/jre/lib/core.jar:${env.JAVA_4_HOME}/jre/lib/xml.jar:${env.JAVA_4_HOME}/jre/lib/graphics.jar:${env.JAVA_4_HOME}/jre/lib/server.jar:${env.JAVA_4_HOME}/jre/lib/ibmorbapi.jar:${env.JAVA_4_HOME}/jre/lib/security.jar
#J2SE-1.5=${env.JAVA_5_HOME}/jre/lib/core.jar:${env.JAVA_5_HOME}/jre/lib/vm.jar:${env.JAVA_5_HOME}/jre/lib/xml.jar:${env.JAVA_5_HOME}/jre/lib/graphics.jar:${env.JAVA_5_HOME}/jre/lib/server.jar:${env.JAVA_5_HOME}/jre/lib/ibmorbapi.jar:${env.JAVA_5_HOME}/jre/lib/security.jar
#export JavaSE-1.6=${JAVA_6_HOME}/jre/lib/rt.jar:${JAVA_6_HOME}/jre/lib/vm.jar:${JAVA_6_HOME}/jre/lib/xml.jar:${JAVA_6_HOME}/jre/lib/graphics.jar:${JAVA_6_HOME}/jre/lib/server.jar:${JAVA_6_HOME}/jre/lib/ibmorbapi.jar:${JAVA_6_HOME}/jre/lib/security.jar

# Other Execution Environment classpaths should be added, if/when we need them
