<!--
  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.
-->
<ivy-module version="2.0">
    <info organisation="org.apache.wookie" module="wookie-jcr" revision="0.13.1"/>
    
    <configurations>
      <conf name="deploy" description="Provide the necessary files and libraries to deploy in a production environment"/>
	  <conf name="dev" extends="deploy" description="Provide the necessary files and libraries to run in standalone (development) mode"/>
	  <conf name="test" extends="dev" visibility="private" description="for our testing frameowrk"/>
	</configurations>
    
    <dependencies>
    	<dependency org="org.apache.wookie" name="wookie" rev="0.13.1" conf="deploy->default">
    	   <artifact name="wookie" type="war" ext="war" conf="deploy->default"/>
    	</dependency>
    	<dependency org="org.apache.wookie" name="wookie-parser" rev="0.13.1" conf="deploy->default">
    	</dependency>
        <dependency org="commons-pool" name="commons-pool" rev="1.3" conf="deploy->default">
		</dependency>   
		<dependency org="commons-configuration" name="commons-configuration" rev="1.4" conf="deploy->default">
        </dependency>
        
               
        <dependency org="javax.jcr" name="jcr" rev="1.0" conf="deploy->default">
        </dependency>
        <dependency org="org.apache.jackrabbit" name="jackrabbit-core" rev="1.5.3" conf="deploy->default">
        </dependency>
        <dependency org="org.apache.jackrabbit" name="jackrabbit-jcr-commons" rev="1.5.3" conf="deploy->default">
        </dependency>
        <dependency org="org.apache.jackrabbit" name="jackrabbit-ocm" rev="1.5.3" conf="deploy->default">
        </dependency>
        
        <dependency org="org.mortbay.jetty" name="jetty-plus" rev="6.1.3" conf="dev->default">
        </dependency>

    </dependencies>
</ivy-module>
