<!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: 1};</script>	
	<script type="text/javascript" src="../xooki/xooki.js"></script>
</head>
<body>
	<textarea id="xooki-source">
<table class="resolver">
<tr><td class="title">Tag</td><td class="value">ibiblio</td></tr>
<tr><td class="title">Handle latest</td><td class="value">yes, at least if the repository server is apache based</td></tr>
<tr><td class="title">Handle publish</td><td class="value">no</td></tr>
</table>

This resolver usually uses ibiblio to find artifacts. 

Prefer the use of ivyrep resolver which adds ivy file handling to this resolver.

<span class="since">since 1.3</span> Using the m2compatible attribute, you can benefit from maven 2 repository compatibility (convert dots in organisation in slashes, search for poms, use transitive dependencies of poms). This setting also affects the default place where the resolver look for its artifacts to point to the maven2 repository. So setting this attribute to true is sufficient to use maven 2 ibiblio repository.

<span class="since">since 1.4</span> When using the m2compatible flag, you can disable the use of poms by setting the usepoms flag to false. It is then roughly equivalent to an url resolver configured like this:
<code type="xml">
<url name="test" m2compatible="true">
  <artifact pattern="http://www.ibiblio.org/maven2/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
</url>
</code>

<h1>Attributes</h1>
This resolver shares the <a href="../configuration/resolvers.html#common">common attributes</a> of standard resolvers.
<table class="ivy-attributes">
<thead>
    <tr><th class="ivy-att">Attribute</th><th class="ivy-att-desc">Description</th><th class="ivy-att-req">Required</th></tr>
</thead>
<tbody>
    <tr><td>root</td><td>the root of the artifacts repository.</td>
        <td>No, defaults to ${ivy.ibiblio.default.artifact.root}</td></tr>
    <tr><td>pattern</td><td>a pattern describing the layout of the artifacts repository.</td>
        <td>No, defaults to ${ivy.ibiblio.default.artifact.pattern}</td></tr>
    <tr><td>m2compatible</td><td>True if this resolver should be maven2 compatible, false otherwise <span class="since">since 1.3</span></td>
        <td>No, defaults to false</td></tr>
    <tr><td>usepoms</td><td>True if this resolver should use maven poms when it is already in m2compatible mode, false otherwise <span class="since">since 1.4</span></td>
        <td>No, defaults to true</td></tr>
</tbody>
</table>

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