#
# Copyright 2005 The Apache Software Foundation.
# 
# Licensed 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.

# checkstyle settings
maven.checkstyle.properties = ${basedir}/../jdo_checks.xml

# dependencies
jdo.jdoapi.jarfile = ${pom.getDependencyPath('apache-jdo:jdo2-api')}
jdo.jdocore.jarfile = ${pom.getDependencyPath('apache-jdo:jdo2-core')}
logging.jarfile = ${pom.getDependencyPath('commons-logging')}
xmlparser = 

# enhancer 
jdo.enhancer.enhanced.dir = ${maven.build.dir}/test-classes
jdo.enhancer.main = org.apache.jdo.enhancer.Main
jdo.enhancer.options = -f -d "${jdo.enhancer.enhanced.dir}" -s "${jdo.enhancer.sourcepath}"
jdo.enhancer.sourcepath = ${maven.build.dir}/test-classes${path.separator}${jdo.jdoapi.jarfile}
jdo.enhancer.classpath = ${maven.build.dir}/classes${path.separator}${jdo.jdocore.jarfile}${path.separator}${jdo.jdoapi.jarfile}${path.separator}${logging.jarfile}
jdo.annotationtest.main = org.apache.jdo.impl.enhancer.util.AnnotationTest
jdo.annotationtest.options = -s "${jdo.enhancer.enhanced.dir}${path.separator}${jdo.enhancer.sourcepath}"
jdo.augmentationtest.main = org.apache.jdo.impl.enhancer.util.AugmentationTest
jdo.augmentationtest.options = -s "${jdo.enhancer.enhanced.dir}${path.separator}${jdo.enhancer.sourcepath}"
jdo.xmlexists.main = org.apache.jdo.impl.model.jdo.xml.XMLExists
jdo.xmlexists.classpath = ${maven.build.dir}/test-classes${path.separator}${path.separator}${jdo.jdocore.jarfile}${path.separator}${jdo.jdoapi.jarfile}${path.separator}${logging.jarfile}

