# © 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
################################################################################
# Copyright (C) 2014-2015, International Business Machines Corporation and
# others. All Rights Reserved.
################################################################################

# Eclipse installation location
# Specify the folder that contains eclipse.exe, for example: eclipse.home=C:/eclipse
#
# Note:
#      By default, this value is set by an environment variable 'ECLIPSE_HOME'.
#      You could uncomment below and specify the path in this file alternatively (recommended). 
#
#eclipse.home=

#
# Java 7 runtime jar location
# Specify jar file path(es) including Java runtime classes.
#
# Note: 
#   Java runtime classes are stored in multiple jar files in modern JREs.
#   To get the full list of jar files included in JRE, you can write a simple
#   code printing system property "sun.boot.class.path".
#
# For example:
#
# java.rt=C:/java7/jre/lib/resources.jar;C:/java7/jre/lib/rt.jar;\
#     C:/java7/jre/lib/sunrsasign.jar;C:/java7/jre/lib/jsse.jar;\
#     C:/java7/jre/lib/jce.jar;C:/java7/jre/lib/charsets.jar;
#     C:/java7/jre/lib/jfr.jar;C:/java7/jre/classes
#
# NOTE: slashes must be forward slashes. Backslashes will NOT work as path separator.
#
# IF java.rt variable has embedded space(s)...
#   ...each element containing an embedded space java.rt must individually quoted and the elements separated by a semi-colon.
#   ex. "C:/Program Files/IBM/JDK7/jre/lib/vm.jar";"C:/Program Files/IBM/JDK7/jre/lib/core.jar"
#                                                ^^^
#java.rt=
