<!--
	Copyright 2008-2010 the EasyAnt project
	
	See the NOTICE file distributed with this work for additional information 
	regarding copyright ownership.
	
	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.  
-->
<ivy-module version="2.0" xmlns:ea="http://www.easyant.org"> 
	<info organisation="org.apache.easyant.buildtypes" module="build-std-skeleton" revision="0.1">
	       <description>A standard build skeleton, relying on standard phases, and providing unit tests</description>
	       <ea:build organisation="org.apache.easyant.buildtypes" module="build-std-ant-plugin" revision="0.1"/>
        </info>
        <configurations>
                <conf name="default" description="runtime dependencies artifact can be used with this conf"/>
                <conf name="test" description="this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases."/>
                <conf name="provided" description="this is much like compile, but indicates you expect the JDK or a container to provide it. It is only available on the compilation classpath, and is not transitive."/>
        </configurations>
	<publications>
		<artifact type="ant"/>
		<artifact type="properties"/>
	</publications>
</ivy-module>
