<!--
	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.plugins" module="maven-publication" revision="0.1">
		<description>
			<p>
				This module provides functionalities to publish a pom.xml. 
				This is really usefull if some maven based projects wants to reuse your artifacts.
			</p>
			<p>
				In some cases we may want to define a different repository url for easyant (or ivy based) artifacts (published by ivy-publication plugin), 
				and another one for maven artifacts (published through maven-publication plugin) this can be done by setting "maven.remote.repo.url" property.
				If this property is unset, artifacts will be republished with maven descriptor on the 
				same repository as ivy-publication module (artifacts will be overwritten).
			</p>
			<p>
				This plugin is based on <a href="http://easyant.org/projects/mavenivy-adapters">mavenivy-adapters tasks</a>.
			</p>
			<p>
				It uses a TypeMapping to define the mapping between ivy world and maven world (like type, ext, mavenPackaging, mavenClassifier).
				Example :
				<code type="xml">
					<typeMappings id="maven.type.mappings.ref">
 						<mapping type="myType" mvnPackaging="jar"/>
 					</typeMappings>
				</code>
				You can override the default typeMappings by using <a href="">AugmentTask</a> like this :
				<code type="xml">
					<augment id="maven.type.mappings.ref">
 						<mapping type="myType" mvnPackaging="jar"/>
 					</augment>
				</code>
			</p>
			<p>
				It also uses a ScopeMapping to define the mapping between ivy configurations and maven scopes.
				Example :
				<code type="xml">
					<scopeMappings id="maven.scope.mappings.ref">
						<mapping scope="compile" conf="myIvyConfiguration"/>
					</scopeMappings>				
				</code>
				You can override the default scopeMappings by using <a href="">AugmentTask</a> like this :
				<code type="xml">
					<augment id="maven.scope.mappings.ref">
						<mapping scope="compile" conf="myIvyConfiguration"/>
					</augment>				
				</code>
			</p>
			
		</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"/>
	</publications>
	<dependencies>
 		<dependency org="org.apache.easyant.tasks" name="mavenivy-adapters" rev="0.1"/>	
 	</dependencies>
</ivy-module>
