<?xml version="1.0" encoding="UTF-8"?>
<!--
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 *
 * Licensed 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>
  <!-- the version of maven's project object model -->

  <pomVersion>3</pomVersion>
  <!-- a unique name for this project -->

  <groupId>scout</groupId>
  <!-- a short but descriptive name for the project -->

  <name>Apache Scout</name>
  <!-- The version of the project under development, e.g.
       1.1, 1.2, 2.0-SNAPSHOT -->

  <currentVersion>1.0-SNAPSHOT</currentVersion>
  <!-- details about the organization that 'owns' the project -->

  <organization>
    <name>Apache Web Services</name>
    <url>http://ws.apache.org/</url>
    <logo>http://ws.apache.org/images/project-logo.jpg</logo>
  </organization>
  <!-- the year the project started -->

  <inceptionYear>2004</inceptionYear>
  <package>org.apache.ws.scout</package>
  <logo>/images/scout.jpg</logo>
  <description>
    Apache Scout is an implementation of the JSR 93 (JAXR)
  </description>
  <!-- a short description of what the project does -->

  <shortDescription>Apache Scout is an implementation of the JSR 93 - JavaTM API for XML Registries 1.0 (JAXR)</shortDescription>
  <!-- the project home page -->

  <url>http://ws.apache.org/scout/</url>
  <issueTrackingUrl>http://issues.apache.org/jira/</issueTrackingUrl>
  <siteAddress>ws.apache.org</siteAddress>
  <siteDirectory>/scout/</siteDirectory>
  <distributionDirectory>/www/ws.apache.org/builds/</distributionDirectory>
  <!-- the version control repository and http url for online access
       the connection element has the form:
       scm:<system>:<system specific connection string> -->

  <repository>
    <connection>scm:subversion:http://svn.apache.org/repos/asf/webservices/scout/trunk</connection>
    <url>http://svn.apache.org/viewcvs.cgi/webservices/scout/trunk/?root=Apache-SVN</url>
  </repository>
  <!-- any mailing lists for the project -->

  <!-- any mailing lists for the project -->
  <mailingLists>
    <mailingList>
      <name>Scout Developer List</name>
      <subscribe>scout-dev-subscribe@ws.apache.org</subscribe>
      <unsubscribe>scout-dev-unsubscribe@ws.apache.org</unsubscribe>
      <archive>http://nagoya.apache.org/eyebrowse/SummarizeList?listId=221</archive>
    </mailingList>
  </mailingLists>
  <!-- who the developers are for the project -->

  <developers>
        <developer>
            <name>Steve Viens</name>
            <id>sviens</id>
            <email>sviens@apache.org</email>
            <organization></organization>
        </developer>
        <developer>
            <name>Anil Saldhana</name>
            <id>anil</id>
            <email>anil@apache.org</email>
            <organization></organization>
        </developer>
        <developer>
            <name>Davanum Srinivas</name>
            <id>dims</id>
            <email>dims@yahoo.com</email>
            <organization></organization>
        </developer>
  </developers>

  <build>
    <nagEmailAddress>scout-dev@ws.apache.org</nagEmailAddress>
    <sourceDirectory>src/java</sourceDirectory>
    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
    <unitTest>
      <includes>
        <include>**/*Test.java</include>
      </includes>
      <excludes>
        <exclude>**/NaughtyTest.java</exclude>
      </excludes>
    </unitTest>
    <resources>
      <resource>
        <directory>src/conf</directory>
        <includes>
          <include>*.properties</include>
        </includes>
      </resource>
    </resources>
  </build>

    <!-- ======= -->
    <!-- Reports -->
    <!-- ======= -->

    <reports>
        <report>maven-license-plugin</report>
        <report>maven-checkstyle-plugin</report>
        <report>maven-pmd-plugin</report>
        <report>maven-jdepend-plugin</report>
        <report>maven-jxr-plugin</report>
        <report>maven-javadoc-plugin</report>
        <report>maven-junit-report-plugin</report>
        <report>maven-clover-plugin</report>
    </reports>
</project>
