#
# Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#

###########################################################
#  Compilation Flags                                      #
###########################################################
javac.debug=on
javac.optimize=off
javac.deprecation=off
javac.source=1.5
#java.obj.dir=JDK1.4_DBG.OBJ

### Component Properties ###
testsrc.dir=src
component.publish.home=build
appserv-rt.jar=${env.S1AS_HOME}/lib/appserv-rt.jar
appserv-admin.jar=${env.S1AS_HOME}/lib/appserv-admin.jar
appserv-admin-ee.jar=${env.S1AS_HOME}/lib/appserv-admin-ee.jar
appserv-se.jar=${env.S1AS_HOME}/lib/appserv-se.jar
appserv-deployment-client.jar=${env.S1AS_HOME}/lib/appserv-deployment-client.jar
imqjmsra.jar=${env.S1AS_HOME}/lib/install/applications/jmsra/imqjmsra.jar
j2ee.jar=${env.S1AS_HOME}/lib/j2ee.jar
junit.jar=${env.APS_HOME}/lib/junit.jar
testng.jar=${env.APS_HOME}/lib/testng.jar
schema2beans.jar=/export/ias/publish/JDK1.4_DBG.OBJ/netbeans/modules/schema2beans.jar



component.name=offline-config-devtest
tests.publish.home=build

testfiles.dir = testfiles
component.tests.classes.dir=${tests.publish.home}/internal/testclasses
tests.workfiles.dir = ${component.tests.classes.dir}/asadmintest


testconfigbeans.jar=${tests.workfiles.dir}/testconfigbeans.jar


# ----- Commons Beanutils, version 1.4 or later -----
commons-beanutils.jar=${commons-beanutils.publish.home}/commons-beanutils.jar
# ----- Commons Collections, version 2.0 or later -----
commons-collections.jar=${commons-collections.publish.home}/commons-collections.jar
# ----- Commons Digester, version 20020820 or later -----
commons-digester.jar=${commons-digester.publish.home}/commons-digester.jar
# ----- Commons Logging, version 1.0.1 or later -----
commons-logging-api.jar=${commons-logging.publish.home}/commons-logging-api.jar
commons-logging.jar=${commons-logging.publish.home}/commons-logging.jar
# ----- Commons Modeler, version 1.0 or later -----
commons-modeler.jar=${commons-modeler.publish.home}/commons-modeler.jar

package=com.sun.enterprise.admin
