# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you 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.
bin.includes = META-INF/,\
               plugin.xml,\
               .,\
			   lib/commons-beanutils-1.8.3.jar,\
			   lib/commons-logging-1.1.1.jar,\
			   lib/commons-io-1.4.jar,\
			   lib/empire-db-2.4.3.jar,\
			   lib/empire-db-codegen-2.4.3.jar,\
			   lib/slf4j-api-1.6.1.jar,\
			   lib/slf4j-log4j12-1.6.1.jar,\
			   lib/log4j-1.2.16.jar,\
               src/main/resources/
jre.compilation.profile = JavaSE-1.6
src.includes = lib/,\
               src/main/
source.. = src/main/java/,\
           src/main/resources/
