#    Copyright 2003-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.

maven.multiproject.type=plugin

maven.repo.central=apache.org
maven.repo.central.directory=/www/cvs.apache.org/repository

maven.remote.group=apcvs

maven.compile.source=1.4
maven.compile.target=1.4
#maven.compile.deprecation=true
maven.compile.debug=true
maven.compile.optimize=true


