<!--
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>docfiles-with-java-test</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <inceptionYear>2009</inceptionYear>
  <name>MJAVADOC-244</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.DocfilesWithJavaTestMavenProjectStub"/>
          <outputDirectory>${basedir}/target/test/unit/docfiles-with-java-test/target/site/apidocs</outputDirectory>
          <javadocOptionsDir>${basedir}/target/test/unit/docfiles-with-java-test/target/javadoc-bundle-options</javadocOptionsDir>
          <javadocDirectory>${basedir}/src/test/resources/unit/docfiles-with-java-test/src/main</javadocDirectory>
          <breakiterator>false</breakiterator>
          <old>false</old>
          <show>protected</show>
          <quiet>true</quiet>
          <verbose>false</verbose>
          <author>true</author>
          <encoding>ISO-8859-1</encoding>
          <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 Docfiles Test 1.0-SNAPSHOT API</windowtitle>
          <docfilessubdirs>true</docfilessubdirs>
          <debug>true</debug>
          <failOnError>true</failOnError>
          <reactorProjects>
            <project implementation="org.apache.maven.plugins.javadoc.stubs.DocfilesWithJavaTestMavenProjectStub"/>
          </reactorProjects>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
