#	 ***************************************************************
#	 * Copyright 2008-2010 the EasyAnt project
#	 *
#	 * See the NOTICE file distributed with this work for additional information 
#	 * regarding copyright ownership.
#    * 
#    * 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.
#	 ***************************************************************
#TODO: find a way to have a common property file shared by all build-types (std/webapp/etc..)
module.name=${ivy.module}
project.ivy.file=${easyant.file}

src.main.java=${basedir}/src/main/java
src.main.resources=${basedir}/src/main/resources
src.test.java=${basedir}/src/test/java
src.test.resources=${basedir}/src/test/resources

target = ${basedir}/target
target.main.classes=${target}/main/classes

target.test.classes=${target}/test/classes
target.test.xml=${target}/test/xml
target.test.html=${target}/test/html

target.artifacts=${target}/artifacts
#without .jar extention 'cause osgi-bundle task is in charge to add extention name
target.artifacts.main.bundle.name=${module.name}
target.report=${target}/report

manifest.file=${target}/MANIFEST.MF

test.framework=junit