<!--
   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/maven-v4_0_0.xsd">
  <parent>
    <groupId>org.apache.ambari</groupId>
    <artifactId>ambari-project</artifactId>
    <version>2.6.2.0.0</version>
    <relativePath>../../ambari-project</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.ambari.contrib.views</groupId>
  <artifactId>ambari-contrib-views</artifactId>
  <packaging>pom</packaging>
  <version>2.6.2.0.0</version>
  <name>Ambari Contrib Views</name>
  <properties>
    <ambari.version>2.6.2.0.0</ambari.version>
    <ambari.dir>${project.parent.parent.basedir}</ambari.dir>
    <hadoop.version>2.7.3</hadoop.version>
    <views.jars.dir>views-jars</views.jars.dir>
    <views.jars.dir.rel>../target/${views.jars.dir}</views.jars.dir.rel>
  </properties>
  <modules>
    <module>utils</module>
    <module>commons</module>
    <module>files</module>
    <module>jobs</module>
    <module>pig</module>
    <module>slider</module>
    <module>capacity-scheduler</module>
    <module>tez</module>
    <module>hawq</module>
    <module>storm</module>
    <module>hueambarimigration</module>
    <module>hive-next</module>
    <module>hive20</module>
    <module>wfmanager</module>
    <!--ambari-views-package should be last in the module list for it to function properly-->
    <module>ambari-views-package</module>
  </modules>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <version>0.11</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludes>
            <!--GIT files-->
            <exclude>.git/</exclude>
            <exclude>**/.gitignore</exclude>
            <exclude>**/.gitattributes</exclude>
            <!--gitignore content-->
            <exclude>.idea/</exclude>
            <exclude>pass.txt</exclude>
            <exclude>.DS_Store</exclude>
            <exclude>.iml/</exclude>
            <exclude>**/*.iml</exclude>
            <exclude>.classpath</exclude>
            <exclude>.project</exclude>
            <exclude>.settings</exclude>
            <exclude>**/target/**</exclude>
            <exclude>**/.gitkeep</exclude>
            <exclude>**/.ember-cli</exclude>
            <exclude>**/.travis.yml</exclude>
            <exclude>**/.watchmanconfig</exclude>
            <exclude>**/.bowerrc</exclude>
            <exclude>**/.editorconfig</exclude>
            <exclude>**/.jshintrc</exclude>
            <exclude>**/.tmp/**</exclude>
            <exclude>**/tmp/**</exclude>
            <exclude>**/*.json</exclude>
            <exclude>**/*.svg</exclude>
            <exclude>**/vendor/**</exclude>
            <exclude>**/bin</exclude>
            <exclude>**/node_modules/**</exclude>
            <exclude>**/vendor/**</exclude>
            <exclude>**/public/**</exclude>
            <exclude>**/dist/**</exclude>
            <exclude>**/robots.txt</exclude>
            <exclude>**/externaladdons/**</exclude>
            <exclude>**/bower_components/**</exclude>
            <exclude>**/bower/**</exclude>
            <exclude>**/.bowerrc</exclude>
            <exclude>**/node/**</exclude>
            <exclude>**/runner.js</exclude>
            <exclude>**/assets/javascripts/**</exclude>
            <exclude>**/assets/stylesheets/**</exclude>
            <exclude>**/assets/static/javascripts/**</exclude>
            <exclude>**/assets/static/stylesheets/**</exclude>
            <exclude>storm/src/main/resources/**</exclude>
            <exclude>**/yarn.lock</exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>rpm-maven-plugin</artifactId>
        <version>2.0.1</version>
        <executions>
          <execution>
            <!-- unbinds rpm creation from maven lifecycle -->
            <phase>none</phase>
            <goals>
              <goal>rpm</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <copyright>2012, Apache Software Foundation</copyright>
          <group>Development</group>
          <description>Maven Recipe: RPM Package.</description>
          <mappings/>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.vafer</groupId>
        <artifactId>jdeb</artifactId>
        <version>1.0.1</version>
        <executions>
          <execution>
            <phase>none</phase>
            <goals>
              <goal>jdeb</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <skip>true</skip>
          <attach>false</attach>
          <submodules>true</submodules>
          <controlDir>${ambari.dir}/ambari-project/src/main/package/deb/control</controlDir>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptors>
            <descriptor>${ambari.dir}/ambari-project/src/main/assemblies/empty.xml</descriptor>
          </descriptors>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>linux</id>
      <activation>
        <os>
          <family>unix</family>
        </os>
      </activation>
    </profile>
  </profiles>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.2</version>
      </dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.4</version>
      </dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.4</version>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.6</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.google.inject</groupId>
        <artifactId>guice</artifactId>
        <version>4.0-beta</version>
      </dependency>
      <dependency>
        <groupId>org.easymock</groupId>
        <artifactId>easymock</artifactId>
        <version>3.2</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1.1</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ambari</groupId>
        <artifactId>ambari-views</artifactId>
        <version>2.6.2.0.0</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

</project>
