<?xml version="1.0" encoding="ISO-8859-1"?>

<!--
  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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>Test GroupId</groupId>
  <artifactId>Test ArtifactId</artifactId>
  <version>Test Version</version>
  <name>Test Name</name>
  <description>Test Description</description>

  <organization>
    <name>Test Organization</name>
    <url>Test Organization URL</url>
  </organization>

  <developers>
    <developer>
      <id>devid</id>
      <name>dev name</name>
      <email>dev@email</email>
      <organization>dev broetchengeber</organization>
      <roles>
        <role>dev main role</role>
        <role>dev second role</role>
      </roles>
      <timezone>-15</timezone>
    </developer>
    <developer>
      <id>devid2</id>
      <name>dev name 2</name>
    </developer>
  </developers>

</project>
