# 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=x-tools.jar
bootclasspath.source.30=x-tools-src.jar
bootclasspath.source.packageroot.30=/

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

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

# The following JARs are from Xerces/Xalan
bootclasspath.34=xalan-j_2.7.0/xalan.jar
bootclasspath.35=xerces_2.11.0/resolver.jar
bootclasspath.36=xerces_2.11.0/xercesImpl.jar
bootclasspath.37=xerces_2.11.0/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.3/commons-logging.jar
bootclasspath.48=xmlsec-1.4.3/xmlsec-1.4.3.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/bsf-api.jar

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

bootclasspath.53=geronimo-activation_1.1_spec-1.0.2/geronimo-activation_1.1_spec-1.0.2.jar

bootclasspath.54=geronimo-jaxb_2.1_spec-1.0/geronimo-jaxb_2.1_spec-1.0.jar

bootclasspath.55=geronimo-stax-api_1.0_spec-1.0.1/geronimo-stax-api_1.0_spec-1.0.1.jar

bootclasspath.56=geronimo-ws-metadata_2.0_spec-1.1.2/geronimo-ws-metadata_2.0_spec-1.1.2.jar

bootclasspath.57=geronimo-jaxws_2.1_spec-1.0/geronimo-jaxws_2.1_spec-1.0.jar
