#
#  Copyright 2005-2006 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.


# The properties defined in this file should align with the names of the 
# <property> elements of Pluto's parent POM. This property file is 
# interpolated and placed in the maven-pluto-plugin jar, and is 
# used by the InstallationDependency class.
portlet-api.version=${portlet-api.version}
servlet-api.version=${servlet-api.version}
jsp-api.version=${jsp-api.version}
jstl.version=${jstl.version}
taglibs.standard.version=${taglibs.standard.version}
xerces.version=${xerces.version}
xercesImpl.version=${xerces.version}
xmlParserAPIs.version=${xerces.version}
castor.version=${castor.version}
commons-digester.version=${commons-digester.version}
commons-cli.version=${commons-cli.version}
commons-httpclient.version=${commons-httpclient.version}
commons-beanutils.version=${commons-beanutils.version}
commons-logging.version=${commons-logging.version}
log4j.version=${log4j.version}
springframework.version=${springframework.version}
plexus.version=${plexus.version}
maven.version=${maven.version}
ant.version=${ant.version}
junit.version=${junit.version}
jmock.version=${jmock.version}
# The version of Pluto's parent POM.
pluto.version=${pom.version}
