<!--
  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.incubator" module="wookie" revision="0.9.0"/>
    
    <configurations>
      <conf name="deploy" description="Provide the necessary files and libraries to deploy in a production environment"/>
      <conf name="runtime" description="Provide the libraries to run in standalone without the deploy libraries"/>
	  <conf name="dev" extends="deploy, runtime" description="Provide the necessary files and libraries to run in standalone (development) mode"/>
	  <conf name="test" extends="dev" visibility="private" description="for our testing framework"/>
	  <conf name="ddlutils" visibility="private" description="Provide the necessary libraries to invoke DDLUtils schema generation"/>
	</configurations>
    
    <dependencies>
        <dependency org="org.apache.incubator" name="wookieJavaConnector" rev="0.9.0" conf="deploy->default">
        </dependency>
        <dependency org="org.apache.incubator" name="wookieW3CParser" rev="0.9.0" conf="deploy->default">
        </dependency>
        <dependency org="com.ibm.icu" name="icu4j" rev="4_2_1" conf="deploy->default">
        </dependency>
        <dependency org="org.apache.commons" name="commons-email" rev="1.1" conf="deploy->default">
        </dependency> 
        <dependency org="commons-codec" name="commons-codec" rev="1.3" conf="deploy->default">
        </dependency>
        <dependency org="commons-collections" name="commons-collections" rev="3.2" conf="deploy->default">
        </dependency>
        <dependency org="commons-compress" name="commons-compress" rev="1.0" conf="deploy->default">
		</dependency>
        <dependency org="commons-configuration" name="commons-configuration" rev="1.4" conf="deploy->default">
        </dependency>
        <dependency org="commons-fileupload" name="commons-fileupload" rev="1.0" conf="deploy->default">
        </dependency>
        <dependency org="commons-httpclient" name="commons-httpclient" rev="3.0.1" conf="deploy->default">
        </dependency>
        <dependency org="commons-lang" name="commons-lang" rev="2.4" conf="deploy->default">
        </dependency>
        <dependency org="commons-logging" name="commons-logging" rev="1.1.1" conf="deploy->default">
        </dependency>
        <dependency org="commons-io" name="commons-io" rev="1.4" conf="deploy->default">
        </dependency>
        <dependency org="dom4j" name="dom4j" rev="1.6.1" conf="deploy->default">
        </dependency>
        <dependency org="htmlcleaner" name="htmlcleaner" rev="2.1.0" conf="deploy->default">
        </dependency>
        <dependency org="org.directwebremoting" name="dwr" rev="2.0.5" conf="deploy->default">
		</dependency>
        <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.5.2" conf="deploy->default">
        </dependency> 
        <dependency org="org.apache.shindig" name="shindig-common" rev="1.1-BETA5-incubating" conf="deploy->default">
        </dependency>
        <dependency org="org.jdom" name="jdom" rev="1.1" conf="deploy->default">
        </dependency>
        <dependency org="org.json" name="json" rev="20080701" conf="deploy->default">
        </dependency>
        <dependency org="org.apache.openjpa" name="openjpa-all" rev="2.0.0" conf="deploy->default">
        </dependency>
        <dependency org="commons-pool" name="commons-pool" rev="1.3" 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>

        <!-- Libraries used in a development/test environment but not in deployment -->
        <dependency org="javax.servlet" name="servlet-api" rev="2.5" conf="runtime->default">
        </dependency>
        <dependency org="org.mortbay.jetty" name="jetty" rev="6.1.3" conf="runtime->default">
        </dependency>
        <dependency org="org.mortbay.jetty" name="jetty-util" rev="6.1.3" conf="runtime->default">
        </dependency>
        <dependency org="org.mortbay.jetty" name="jetty-plus" rev="6.1.3" conf="runtime->default">
        </dependency>
        <dependency org="org.mortbay.jetty" name="jetty-naming" rev="6.1.3" conf="runtime->default">
        </dependency>
        <dependency org="org.mortbay.jetty" name="jsp-2.1" rev="6.1.3" conf="runtime->default">
        </dependency>
        <dependency org="org.mortbay.jetty" name="jsp-api-2.1" rev="6.1.3" conf="runtime->default">
        </dependency>
        <dependency org="org.apache.derby" name="derby" rev="10.4.2.0" conf="runtime->default">
		</dependency>
		<dependency org="commons-dbcp" name="commons-dbcp" rev="1.2.2" conf="runtime->default">
		</dependency>
		
		<!-- Libraries used in testing -->
        <dependency org="junit" name="junit" rev="4.7" conf="test->default">
        </dependency>
        <dependency org="directory-naming" name="naming-java" rev="0.8" conf="test->default">
		</dependency>
        
		<!-- DDLUtils Library -->
        <dependency org="org.apache.ddlutils" name="ddlutils" rev="1.0" conf="ddlutils->default">
        </dependency>
        <dependency org="log4j" name="log4j" rev="1.2.14" conf="ddlutils->default">
        </dependency>
        
        <exclude module="juel-api"/>
        <exclude module="spring"/>
        <exclude module="struts"/>
        <exclude module="webwork"/>
        <exclude module="jms"/>
        <exclude module="jmxri"/>
        <exclude module="jmxtools"/>
        <exclude module="xom"/>
        <exclude module="commons-jxpath"/>
    </dependencies>
</ivy-module>
