<!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">
<h1>JVM compability</h1>

Up to Ivy 2.3.x, a minimum of Java 1.4 is required.

Since Ivy 2.4.0, a minimum of Java 5 is required.

<h1>Apache Ant</h1>

Ivy doesn't require much of Ant and should run correctly on pretty old versions. But it is recommended to use at least Ant 1.6.

<h1>Other optional dependencies</h1>

The required versions of the Apache HttpClient, Jsch or any optional dependency are to be checked against Ivy's dependency descriptor. In Ivy's source, check for the ivy.xml file at the root. Or the pom.xml of <tt>org.apache.ivy#ivy</tt> in the Maven Central repository.

<h1>Environment / Configuration Requirements</h1>

Ivy does not at this time support multithreaded use. It thus should not be used with the ant <tt>&lt;parallel&gt;</tt> task.

	</textarea>
<script type="text/javascript">xooki.postProcess();</script>
</body>
</html>
