<!--
   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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <parent>
    <groupId>org.apache.abdera</groupId>
    <artifactId>abdera</artifactId>
    <version>0.4.0-incubating</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>abdera-core</artifactId>
  <packaging>jar</packaging>
  <name>Abdera Core</name>
  <version>0.4.0-incubating</version>
  <description>Atom Specification Implementation Core</description>
  <properties>
    <topDir>${basedir}/..</topDir>
  </properties>
  <dependencies>
  	<dependency>
  		<groupId>junit</groupId>
  		<artifactId>junit</artifactId>
  	</dependency>
  	<dependency>
  		<groupId>org.apache.abdera</groupId>
  		<artifactId>abdera-i18n</artifactId>
  		<version>0.4.0-incubating</version>
  	</dependency>
  	<dependency>
  		<groupId>org.apache.geronimo.specs</groupId>
  		<artifactId>geronimo-activation_1.0.2_spec</artifactId>
  	</dependency>
  	<dependency>
  		<groupId>commons-codec</groupId>
  		<artifactId>commons-codec</artifactId>
  	</dependency>
  </dependencies>
</project>