<?xml version="1.0" encoding="UTF-8"?>
<!--
  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 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>commons-jelly</groupId>
    <artifactId>commons-jelly-tags</artifactId>
    <version>1.1-SNAPSHOT</version>
  </parent>

  <artifactId>commons-jelly-tags-betwixt</artifactId>
  <packaging>jar</packaging>
  <name>commons-jelly-tags-betwixt</name>
  <description>This is a Jelly interface for Betwixt.</description>

  <dependencies>
    <!-- START for compilation -->
    <dependency>
      <groupId>commons-betwixt</groupId>
      <artifactId>commons-betwixt</artifactId>
      <version>0.6</version>
    </dependency>
    <dependency>
      <groupId>commons-digester</groupId>
      <artifactId>commons-digester</artifactId>
      <version>1.6</version>
    </dependency>

    <!-- END for compilation -->

    <!-- START for testing -->

    <dependency>
      <groupId>commons-jelly</groupId>
      <artifactId>commons-jelly-tags-log</artifactId>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>commons-jelly</groupId>
      <artifactId>commons-jelly-tags-junit</artifactId>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>

    <!-- END for testing -->
  </dependencies>
</project>
