<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!--
   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.    
-->
<html>
<head>
	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
	<script type="text/javascript">var xookiConfig = {level: 0};</script>	
	<script type="text/javascript" src="xooki/xooki.js"></script>
</head>
<body>
	<textarea id="xooki-source">
Many things are configurable in Ivy, and many things are available with Ivy core. But when you want to do something not built in ivy core, you can still plug your own code.

Many things are pluggable in Ivy:
<ul>
<li>module descriptor parsers</li>
<li>dependency resolvers</li>
<li>lock strategies</li>
<li>latest strategies</li>
<li>circular dependency strategies</li>
<li>conflict managers</li>
<li>report outputters</li>
<li>version matchers</li>
<li>triggers</li>
</ul>

Before trying to implement your own, we encourage you to check if the solution to your problem cannot be addressed by existing features, or by [[links contributed ones]]. Do not hesitate to ask for help on the [[mailing-lists]].

If you still don't find what you need, then you'll have to develop your own plugin or find someone who could do that for you.

All ivy plug-ins use the same code patterns as ant specific tasks for parameters. This means that if you want to have a "myattribute" of type String, you just have to declare a method called setMyattribute(String val) on your plug-in. The same applies to child tags, you just have to follow Ant specifications.

All pluggable code in Ivy is located in the [[gitdir:src/java/org/apache/ivy/plugins org.apache.ivy.plugins]] package. In each package you will find an interface that you must implement to provide a new plugin. We usually also provide an abstract class easing the implementation and making your code more independent of interface changes. We heavily recommend using these abstract classes as a base class.

To understand how your implementation can be done, we suggest looking at existing implementations we provide, it's the best way to get started.
	</textarea>
<script type="text/javascript">xooki.postProcess();</script>
</body>
</html>
