<?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 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"> 

  <modelVersion>4.0.0</modelVersion>

  <parent>
      <groupId>org.apache.myfaces.buildtools</groupId>
      <artifactId>myfaces-plugin-parent</artifactId>
      <version>1.0.6</version>
      <relativePath>../myfaces-plugin-parent/pom.xml</relativePath>
  </parent>

  <groupId>org.apache.myfaces.buildtools</groupId>
  <artifactId>myfaces-builder-annotations</artifactId> 
  <version>1.0.10-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>Apache MyFaces Buildtools Maven2 Builder Annotations</name>

  <description>
    A set of Java 1.5 Annotation classes that can be applied to classes that are
    intended to be JSF components, validators, etc. The maven-builder-plugin will
    recognise these annotations and process the class appropriately.
  </description>
  
  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-annotations</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-annotations</developerConnection>
    <url>http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-annotations</url>
  </scm>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0.2</version>
        <inherited>true</inherited>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <reporting>
    <plugins>
      <plugin>
        <artifactId>maven-javadoc-plugin</artifactId>
      </plugin>
    </plugins>
  </reporting>
</project>
