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

<!-- $Rev: 1624068 $ $Date: 2014-09-10 19:41:33 +0200 (Mi, 10 Sep 2014) $ -->

<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.geronimo.genesis</groupId>
        <artifactId>genesis-default-flava</artifactId>
        <version>2.3</version>
    </parent>
    
    <artifactId>genesis-java8-flava</artifactId>
    <name>Genesis Flava :: Java 8</name>
    <packaging>pom</packaging>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireJavaVersion>
                                    <version>[1.8,)</version>
                                </requireJavaVersion>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <quiet>true</quiet>
                    <source>1.8</source>
                    <links>
                        <link>http://docs.oracle.com/javase/8/docs/api</link>
                    </links>
                    <tags>
                        <tag>
                            <name>goal</name>
                            <placement>Xt</placement>
                        </tag>
                        <tag>
                            <name>phase</name>
                            <placement>Xt</placement>
                        </tag>
                        <tag>
                            <name>execute</name>
                            <placement>Xt</placement>
                        </tag>
                        <tag>
                            <name>requiresDependencyResolution</name>
                            <placement>Xt</placement>
                        </tag>
                        <tag>
                            <name>parameter</name>
                            <placement>Xf</placement>
                        </tag>
                        <tag>
                            <name>required</name>
                            <placement>Xf</placement>
                        </tag>
                        <tag>
                            <name>readonly</name>
                            <placement>Xf</placement>
                        </tag>
                        <tag>
                            <name>component</name>
                            <placement>Xf</placement>
                        </tag>
                        <tag>
                            <name>plexus.component</name>
                            <placement>Xf</placement>
                        </tag>
                        <tag>
                            <name>plexus.requirement</name>
                            <placement>Xf</placement>
                        </tag>
                    </tags>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <configuration>
                    <targetJdk>1.8</targetJdk>
                </configuration>
            </plugin>
        </plugins>
    </reporting>

</project>

