<!--
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>org.apache.maven.plugins.maven-javadoc-plugin.unit</groupId>
  <artifactId>javahome-test</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <inceptionYear>2006</inceptionYear>
  <name>Maven Javadoc Plugin Java home Test</name>
  <url>http://maven.apache.org</url>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <project implementation="org.apache.maven.plugins.javadoc.stubs.DefaultConfigurationMavenProjectStub"/>
          <outputDirectory>${basedir}/target/test/unit/javaHome-test/target/site/apidocs</outputDirectory>
          <javadocOptionsDir>${basedir}/target/test/unit/javaHome-test/target/javadoc-bundle-options</javadocOptionsDir>
          <breakiterator>false</breakiterator>
          <old>false</old>
          <show>protected</show>
          <quiet>true</quiet>
          <verbose>false</verbose>
          <author>true</author>
          <encoding>ISO-8859-1</encoding>
          <docfilessubdirs>false</docfilessubdirs>
          <linksource>false</linksource>
          <nocomment>false</nocomment>
          <nodeprecated>false</nodeprecated>
          <nodeprecatedlist>false</nodeprecatedlist>
          <nohelp>false</nohelp>
          <noindex>false</noindex>
          <nonavbar>false</nonavbar>
          <nosince>false</nosince>
          <notree>false</notree>
          <serialwarn>false</serialwarn>
          <splitindex>false</splitindex>
          <stylesheet>java</stylesheet>
          <groups/>
          <tags/>
          <use>true</use>
          <version>true</version>
          <windowtitle>Maven Javadoc Plugin Java Home Test 1.0-SNAPSHOT API</windowtitle>
          <debug>true</debug>
          <failOnError>true</failOnError>
          <reactorProjects>
            <project implementation="org.apache.maven.plugins.javadoc.stubs.DefaultConfigurationMavenProjectStub"/>
          </reactorProjects>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
