# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
#   Boot directory properties file.
#

# The bootclasspath properties define elements of the virtual machine's
# boot class path.
#
# Upon initialization the VM orders each property of the form 'bootclasspath.<n>'
# on the numerical value of 'n', and sets the bootclasspath to the
# correspondingly ordered property values.  The values are taken to be
# file paths relative to the jre/lib/boot directory.
#
# The values of 'n' must be non-negative, and may be non-sequential.
# Duplicate values of 'n' result in unspecified behavior.
#
# The launcher option -Xbootclasspath overrides this behavior, and
# -Xbootclasspath/a and -Xbootclasspath/p modify the resulting bootclasspath. 
#
# The source location for a given bootclasspath element is defined by the
# matching property 'bootclasspath.source.<n>'.  If a source location is
# unspecified then source is deemed to be unavailable.
# The path offset within a given source location is defined by the matching
# property 'bootclasspath.source.packageroot.<n>'.  If a packageroot is
# unspecified then the source is deemed to be available rooted at '/'.
# Packageroots given with no source location are ignored.

bootclasspath.0=accessibility.jar
bootclasspath.source.0=accessibility-src.jar
bootclasspath.source.packageroot.0=/

bootclasspath.1=annotation.jar
bootclasspath.source.1=annotation-src.jar
bootclasspath.source.packageroot.1=/

bootclasspath.2=applet.jar
bootclasspath.source.2=applet-src.jar
bootclasspath.source.packageroot.2=/

bootclasspath.3=archive.jar
bootclasspath.source.3=archive-src.jar
bootclasspath.source.packageroot.3=/

bootclasspath.4=auth.jar
bootclasspath.source.4=auth-src.jar
bootclasspath.source.packageroot.4=/

bootclasspath.5=awt.jar
bootclasspath.source.5=awt-src.jar
bootclasspath.source.packageroot.5=/

bootclasspath.6=beans.jar
bootclasspath.source.6=beans-src.jar
bootclasspath.source.packageroot.6=/

bootclasspath.7=concurrent.jar
bootclasspath.source.7=concurrent-src.jar
bootclasspath.source.packageroot.7=/

bootclasspath.8=crypto.jar
bootclasspath.source.8=crypto-src.jar
bootclasspath.source.packageroot.8=/

bootclasspath.9=imageio.jar
bootclasspath.source.9=imageio-src.jar
bootclasspath.source.packageroot.9=/

bootclasspath.10=instrument.jar
bootclasspath.source.10=instrument-src.jar
bootclasspath.source.packageroot.10=/

bootclasspath.11=jndi.jar
bootclasspath.source.11=jndi-src.jar
bootclasspath.source.packageroot.11=/

bootclasspath.12=lang-management.jar
bootclasspath.source.12=lang-management-src.jar
bootclasspath.source.packageroot.12=/

bootclasspath.13=logging.jar
bootclasspath.source.13=logging-src.jar
bootclasspath.source.packageroot.13=/

bootclasspath.14=luni.jar
bootclasspath.source.14=luni-src.jar
bootclasspath.source.packageroot.14=/

bootclasspath.15=math.jar
bootclasspath.source.15=math-src.jar
bootclasspath.source.packageroot.15=/

bootclasspath.16=nio.jar
bootclasspath.source.16=nio-src.jar
bootclasspath.source.packageroot.16=/

bootclasspath.17=nio_char.jar
bootclasspath.source.17=nio_char-src.jar
bootclasspath.source.packageroot.17=/

bootclasspath.19=prefs.jar
bootclasspath.source.19=prefs-src.jar
bootclasspath.source.packageroot.19=/

bootclasspath.20=print.jar
bootclasspath.source.20=print-src.jar
bootclasspath.source.packageroot.20=/

bootclasspath.21=regex.jar
bootclasspath.source.21=regex-src.jar
bootclasspath.source.packageroot.21=/

bootclasspath.22=rmi.jar
bootclasspath.source.22=rmi-src.jar
bootclasspath.source.packageroot.22=/

bootclasspath.23=security.jar
bootclasspath.source.23=security-src.jar
bootclasspath.source.packageroot.23=/

bootclasspath.24=sound.jar
bootclasspath.source.24=sound-src.jar
bootclasspath.source.packageroot.24=/

bootclasspath.25=sql.jar
bootclasspath.source.25=sql-src.jar
bootclasspath.source.packageroot.25=/

bootclasspath.26=swing.jar
bootclasspath.source.26=swing-src.jar
bootclasspath.source.packageroot.26=/

bootclasspath.27=text.jar
bootclasspath.source.27=text-src.jar
bootclasspath.source.packageroot.27=/

bootclasspath.28=x_mgt.jar
bootclasspath.source.28=x_mgt-src.jar
bootclasspath.source.packageroot.28=/

bootclasspath.29=x-net.jar
bootclasspath.source.29=x-net-src.jar
bootclasspath.source.packageroot.29=/

bootclasspath.30=xml.jar
bootclasspath.source.30=xml-src.jar
bootclasspath.source.packageroot.30=/

# ICU functionality for text/characters are provided by the ICU4J 
# and ICU4J-charsets JAR files.
bootclasspath.31=icu4j_4.2.1/icu4j-4_2_1.jar
bootclasspath.32=icu4j_4.2.1/icu4j-charsets-4_2_1.jar

# The following JARs are from Xerces/Xalan
bootclasspath.34=xalan-j_2.7.0/xalan.jar
bootclasspath.35=xerces_2.9.1/resolver.jar
bootclasspath.36=xerces_2.9.1/xercesImpl.jar
bootclasspath.37=xerces_2.9.1/xml-apis.jar

# The following JARs are from mx4j.sf.net
bootclasspath.38=mx4j_3.0.2/mx4j.jar
bootclasspath.39=mx4j_3.0.2/mx4j-remote.jar

# Dependencies for awt and swing
bootclasspath.40=misc.jar

# Apache Yoko
# Yoko has a dependency on Jakata BCEL
bootclasspath.41=yoko-1.0/yoko.jar
bootclasspath.42=yoko-1.0/yoko-core.jar
bootclasspath.43=yoko-1.0/yoko-rmi-spec.jar
bootclasspath.44=yoko-1.0/yoko-rmi-impl.jar
bootclasspath.45=bcel-5.2/bcel-5.2.jar

bootclasspath.46=pack200.jar
bootclasspath.source.46=pack200-src.jar
bootclasspath.source.packageroot.46=/

# The following JARs are from XML Security
bootclasspath.47=xmlsec-1.4.0/commons-logging.jar
bootclasspath.48=xmlsec-1.4.0/xmlsec-1.4.0.jar


#
#  Sun compatibility
#
#  Uncomment the three lines below to include additional
#  compatiblity types.
#
#bootclasspath.49=suncompat.jar
#bootclasspath.source.49=suncompat-src.jar
#bootclasspath.source.packageroot.49=/

bootclasspath.50=asm-3.1/asm-3.1.jar

bootclasspath.51=bsf-3.0-beta3/bsf-api.jar

bootclasspath.52=axis2-1.3/axis2-saaj-api-1.3.jar
