<!--
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>optionsumlautencoding-test</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <inceptionYear>2006</inceptionYear>
  <name>Maven Javadoc Plugin Options Umlaut Encoding 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.OptionsUmlautEncodingMavenProjectStub"/>
          <localRepository>${localRepository}</localRepository>
          <outputDirectory>${basedir}/target/test/unit/optionsumlautencoding-test/target/site/apidocs</outputDirectory>
          <javadocOptionsDir>${basedir}/target/test/unit/optionsumlautencoding-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>
          <!-- include umlauts in windowtitle which are written to options-file -->
          <windowtitle>Maven Javadoc Plugin Options Umlaut Encoding ö ä ü ß Test 1.0-SNAPSHOT API</windowtitle>
          <debug>true</debug>
          <failOnError>true</failOnError>
          <detectJavaApiLink>true</detectJavaApiLink>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
