<!--
 * Copyright 2001-2009 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.
 *
 */ -->
<project name="juddi-dist" default="package-dist" basedir=".">
	<property file="package.properties"/>
	<property name="dist.dir" value="${basedir}/target/dist"/>

	<target name="package-dist">
		<mkdir dir="${dist.dir}"/>
		<mkdir dir="${dist.dir}/docs"/>
		<copy file="${dependency.juddi.docs}"
			todir="${dist.dir}"/>
		<copy file="${dependency.juddi.sources}"
			todir="${dist.dir}"/>
		<copy file="${dependency.juddi.javadoc}"
			todir="${dist.dir}"/>
		<copy file="${dependency.juddiv3.war}"
			tofile="${dist.dir}/juddiv3.war"/>
		<copy file="${dependency.juddi.samples}"
			todir="${dist.dir}"/>
		<copy file="LICENSE"
			todir="${dist.dir}"/>
	</target>
</project>
