<!--
  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" xmlns:m="http://ant.apache.org/ivy/maven">
    <info organisation="org.apache.wookie" module="wookie-parser" revision="0.13.0"/>
    
    <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 framework"/>
	  <conf name="deploy-with-src-and-docs" extends="deploy" description="Used for publishing maven artifacts to the snapshot repo"/>
	  <conf name="deploy-signed" extends="deploy-with-src-and-docs" description="Used for publishing maven artifacts to the staging area repo"/>
	</configurations>
	
	<publications>      
	  <artifact name="wookie-parser" conf="deploy" type="pom" ext="pom"/>
      <artifact name="wookie-parser" conf="deploy" type="jar"/>
      <artifact name="wookie-parser" conf="deploy-with-src-and-docs" type="sources" ext="jar" m:classifier="sources"/>
      <artifact name="wookie-parser" conf="deploy-with-src-and-docs" type="javadoc" ext="jar" m:classifier="javadoc"/>
      <artifact name="wookie-parser" conf="deploy-signed" type="pom.asc" ext="pom.asc"/>
      <artifact name="wookie-parser" conf="deploy-signed" type="jar.asc" ext="jar.asc"/>
      <artifact name="wookie-parser" conf="deploy-signed" type="sources.asc" ext="jar.asc" m:classifier="sources"/>
	  <artifact name="wookie-parser" conf="deploy-signed" type="javadoc.asc" ext="jar.asc" m:classifier="javadoc"/>
	</publications>
    
    <dependencies>
        <dependency org="com.ibm.icu" name="icu4j" rev="4.6.1" conf="deploy->default">
        </dependency>
        <dependency org="commons-logging" name="commons-logging" rev="1.1.1" conf="deploy->default">
        </dependency>
        <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.4" conf="deploy->default">
        </dependency> 
         <dependency org="commons-lang" name="commons-lang" rev="2.4" conf="deploy->default">
        </dependency>
        <dependency org="org.apache.commons" name="commons-compress" rev="1.0" conf="deploy->default">
		</dependency>
		<dependency org="commons-io" name="commons-io" rev="2.1" conf="deploy->default">
        </dependency>
        <dependency org="commons-httpclient" name="commons-httpclient" rev="3.0.1" conf="deploy->default">
        </dependency>
        <dependency org="org.jdom" name="jdom" rev="1.1" conf="deploy->default">
        </dependency>
    </dependencies>
</ivy-module>
