<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed 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. See accompanying LICENSE file.
-->
<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>
  <parent>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdds</artifactId>
    <version>0.4.0-SNAPSHOT</version>
  </parent>
  <artifactId>hadoop-hdds-docs</artifactId>
  <version>0.4.0-SNAPSHOT</version>
  <description>Apache Hadoop HDDS/Ozone Documentation</description>
  <name>Apache Hadoop HDDS/Ozone Documentation</name>
  <packaging>jar</packaging>

  <dependencies>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.6.0</version>
        <executions>
          <execution>
            <goals>
              <goal>exec</goal>
            </goals>
            <phase>compile</phase>
            <configuration>
              <executable>${shell-executable}</executable>
              <workingDirectory>${project.build.directory}</workingDirectory>
              <arguments>
                <argument>${basedir}/dev-support/bin/generate-site.sh</argument>
                <argument>${hdds.version}</argument>
                <argument>${project.build.directory}</argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>themes/ozonedoc/static/js/bootstrap.min.js</exclude>
            <exclude>themes/ozonedoc/static/js/jquery.min.js</exclude>
            <exclude>themes/ozonedoc/static/css/bootstrap-theme.min.css
            </exclude>
            <exclude>themes/ozonedoc/static/css/bootstrap.min.css.map</exclude>
            <exclude>themes/ozonedoc/static/css/bootstrap.min.css</exclude>
            <exclude>themes/ozonedoc/static/css/bootstrap-theme.min.css.map
            </exclude>
            <exclude>
              themes/ozonedoc/static/fonts/glyphicons-halflings-regular.svg
            </exclude>
            <exclude>themes/ozonedoc/layouts/index.html</exclude>
            <exclude>themes/ozonedoc/theme.toml</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
