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

maven.repo.remote=http://repo1.maven.org/maven

maven.checkstyle.properties = checkstyle.xml

# uncomment the next line to work in offline mode (no jar download & no linkcheck)
#maven.mode.online=

maven.javadoc.author=false
maven.javadoc.overview=src/java/org/apache/commons/pool/overview.html
maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api
maven.javadoc.javadocreport=false
maven.javadoc.warningsreport=false

# Merge in a file containing just Built-By attribute
maven.jar.manifest=${basedir}/manifestMods.txt

# Jar Manifest Additional Attributes
maven.jar.manifest.attributes.list=Specification-Version,Implementation-Vendor-Id,X-Compile-Source-JDK,X-Compile-Target-JDK,Bundle-SymbolicName,Bundle-License,Bundle-ManifestVersion,Bundle-Name,Bundle-Vendor,Bundle-Version,Export-Package,Import-Package
maven.jar.manifest.attribute.Specification-Version=${pom.currentVersion}
maven.jar.manifest.attribute.Implementation-Vendor-Id=org.apache
maven.jar.manifest.attribute.X-Compile-Source-JDK=${maven.compile.source}
maven.jar.manifest.attribute.X-Compile-Target-JDK=${maven.compile.target}

#OSGi Jar Manifest entries
maven.jar.manifest.attribute.Bundle-SymbolicName=${pom.package}
maven.jar.manifest.attribute.Bundle-License=http://www.apache.org/licenses/LICENSE-2.0.txt
maven.jar.manifest.attribute.Bundle-ManifestVersion=2
maven.jar.manifest.attribute.Bundle-Name=Apache Commons Pool Bundle
maven.jar.manifest.attribute.Bundle-Vendor=${pom.organization.name}
maven.jar.manifest.attribute.Bundle-Version=${pom.currentVersion}
maven.jar.manifest.attribute.Export-Package=org.apache.commons.pool;version=${pom.currentVersion}, org.apache.commons.pool.impl;version=${pom.currentVersion}
maven.jar.manifest.attribute.Import-Package=org.apache.commons.pool;version=${pom.currentVersion}, org.apache.commons.pool.impl;version=${pom.currentVersion}

maven.xdoc.date=bottom
maven.xdoc.poweredby.image=maven-feather.png
maven.xdoc.version=${pom.currentVersion}
maven.xdoc.developmentProcessUrl=http://commons.apache.org/charter.html

maven.compile.debug=on
maven.compile.deprecation=off
maven.compile.optimize=off
maven.compile.source=1.3
maven.compile.target=1.3

maven.dist.src.assembly.dir=${maven.dist.assembly.dir}/src/${maven.final.name}-src

maven.jdiff.new.tag=CURRENT
maven.jdiff.old.tag=POOL_1_3

maven.jarResources.basedir=src/java
maven.jar.excludes=**/package.html
maven.junit.fork=true

clover.excludes=**/Test*.java

maven.announcement.file=${basedir}/RELEASE-NOTES.txt
maven.announcement.stylesheet.path=${basedir}/release-notes.jsl
