<!--
  ~ 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.
  -->

<project name="version" basedir="." default="generate.service">
	
	<property name="dest.dir" value="build" />
	
	<property name="dest.dir.classes" value="${dest.dir}/classes" />
	
	<property name="axis2.home" value="../../" />
	
	<property name="repository.path" value="${axis2.home}/repository/servicejars" />
	
	<path id="build.class.path">
		<fileset dir="${axis2.home}/lib">
			<include name="*.jar" />
		</fileset>
	</path>
	
	<target name="clean">
		<delete dir="${dest.dir}" />
	</target>
	
	<target name="prepare">
		
		<mkdir dir="${dest.dir}" />
		
		<mkdir dir="${dest.dir.classes}" />

		<copy todir="${dest.dir.classes}">
            <fileset dir="resources"/>
        </copy>
	</target>
	
	<target name="generate.service" depends="clean,prepare">
		
		<javac srcdir="src" destdir="${dest.dir.classes}" includes="sample/jaxws/**">
			<classpath refid="build.class.path" />
		</javac>
		
		<jar basedir="${dest.dir.classes}" destfile="${dest.dir}/version.jar" />
		
		<copy file="${dest.dir}/version.jar" tofile="${repository.path}/version.jar" overwrite="true" />
	
	</target>
	
</project>
