# Edit this property to point at your junit.jar
junit.lib=../../../extension.lib.external/junit.jar
# Edit this if/when the release number changes
release.version=3.0.0

# Edit this property to "true" to enable debug attributes like lines, variables and source-filename
javac.debug=true
javac.debuglevel=lines,vars,source

# Edit this property when you would like to override the java version during testing
javac.version=1.8

# Do not edit the variables below
# They may, however, be overridden in parent scripts
commonj.sdo.jar=commonj.sdo_2.1.1.v201112051852.jar
jaxb-api.jar=javax.xml.bind_2.2.12.v201410011542.jar
mail.jar=javax.mail_1.4.0.v201005080615.jar

eclipselink.core.depend=javax.resource_1.6.0.v201204270900.jar,javax.ejb_3.1.0.v201205171433.jar,javax.jms_1.1.0.v200906010428.jar,javax.transaction_1.1.0.v201002051055.jar,javax.mail_1.4.0.v201005080615.jar

sdo.classgen.run.path=../../../${eclipselink.jar}${path.separator}../classes${path.separator}../${eclipselink.sdo.plugins}/${commonj.sdo.jar}${path.separator}../${eclipselink.plugins}/${mail.jar}

eclipselink.jar=eclipselink.jar
eclipselink.sdo.base=..
eclipselink.core=../org.eclipse.persistence.core
eclipselink.plugins=../../plugins
eclipselink.sdo=../org.eclipse.persistence.sdo
eclipselink.sdo.test=.
eclipselink.sdo.plugins=../plugins

unsigned.persistence10.jar=javax.persistence_unsigned_for_testing_1.0.0.jar

tmp.dir=tmp
src.dir=src
classes.dir=classes
resource.dir=resource
report.dir=reports

asm=org.eclipse.persistence.asm_6.0.0.v201710052159.jar

xml.platform=org.eclipse.persistence.platform.xml.jaxp.JAXPPlatform
parser=org.eclipse.persistence.platform.xml.jaxp.JAXPParser

#JaCoCo
jacocoagent.jar=jacocoagent.jar
