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

#Generated by Maven Ant Plugin - DO NOT EDIT THIS FILE!
#Fri Mar 08 12:53:27 CET 2013
commons.compiler.compilerVersion=
maven.compile.source=1.5
commons.release.2.name=commons-fileupload-${commons.release.2.version}
commons.release.desc=
maven.build.srcDir.0=src/main/java
commons.binary.suffix=-bin
commons.manifestfile=${maven.build.outputDir}/osgi/MANIFEST.MF
maven.build.timestamp.format=yyyy-MM-dd HH\:mm\:ssZ
commons.project-info.version=2.6
maven.build.resourceDir.1=.
maven.build.resourceDir.0=src/main/resources
project.build.sourceEncoding=iso-8859-1
sourceReleaseAssemblyDescriptor=source-release
commons.release.3.name=commons-fileupload-${commons.release.3.version}
maven.build.outputDir=${maven.build.dir}/classes
commons.componentid=fileupload
commons.site.path=commons-fileupload
maven.repo.local=${user.home}/.m2/repository
maven.build.finalName=commons-fileupload-1.3-SNAPSHOT
commons.osgi.private=
maven.build.testDir.0=src/test/java
commons.javadoc.javaee.link=http\://download.oracle.com/javaee/6/api/
commons.osgi.export=org.apache.commons.*;version\=1.3-SNAPSHOT;-noimport\:\=true
commons.release.2.binary.suffix=-bin
maven.reporting.outputDirectory=${maven.build.dir}/site
commons.compiler.javac=
commons.encoding=iso-8859-1
organization.logo=http\://www.apache.org/images/asf_logo_wide.gif
commons.scmPubUrl=https\://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-fileupload
sonar.host.url=https\://analysis.apache.org/
commons.rc.version=RC1
commons.cobertura.version=2.5.2
commons.release.name=commons-fileupload-1.3
minSeverity=info
maven.build.testOutputDir=${maven.build.dir}/test-classes
project.reporting.outputEncoding=iso-8859-1
maven.build.dir=target
maven.test.reports=${maven.build.dir}/test-reports
gpg.useagent=true
commons.javadoc.version=2.9
commons.surefire.version=2.13
commons.changes.version=2.8
commons.release.version=1.3
commons.jxr.version=2.3
commons.surefire-report.version=2.13
commons.rat.version=0.8
commons.site.cache=/Users/stripodi/commons-sites
project.build.outputDirectory=${maven.build.outputDir}
commons.docEncoding=iso-8859-1
commons.javadoc.java.link=http\://download.oracle.com/javase/6/docs/api/
commons.deployment.protocol=scp
maven.settings.offline=false
distMgmtSnapshotsName=Apache Development Snapshot Repository
maven.settings.interactiveMode=true
maven.compile.target=1.5
commons.release.2.desc=
commons.jira.pid=12310476
project.build.directory=${maven.build.dir}
arguments=
commons.surefire-report.aggregate=false
commons.release.3.binary.suffix=-bin
commons.wagon-ssh.version=2.3
distMgmtSnapshotsUrl=https\://repository.apache.org/content/repositories/snapshots
maven.build.testResourceDir.1=.
maven.build.testResourceDir.0=src/test/resources
commons.osgi.dynamicImport=javax.portlet
commons.compiler.fork=false
commons.jdepend.version=2.0-beta-2
commons.release.3.desc=
implementation.build=${scmBranch}@r${buildNumber}; 2013-03-08 12\:53\:21+0100
commons.site-plugin.version=3.2
commons.osgi.symbolicName=org.apache.commons.fileupload
commons.surefire.java=
commons.osgi.import=\!javax.portlet,*
commons.jira.id=FILEUPLOAD
commons.clirr.version=2.5
