<?xml version="1.0" encoding="UTF-8"?>
<!--
 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>
    <parent>
        <artifactId>storm</artifactId>
        <groupId>org.apache.storm</groupId>
        <version>2.0.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>apache-storm-bin</artifactId>
    <packaging>pom</packaging>
    <name>Storm Binary Distribution</name>
    <description>Storm binary distribution</description>

    <!--
        Used for cache busting in the Storm UI HTML and script.js files
        See src/main/assembly/pom.xml for the fileSet rules with
            <filtered>true</filtered>
    -->
    <properties>
        <packageTimestamp>${maven.build.timestamp}</packageTimestamp>
        <maven.build.timestamp.format>YYYYMMddHHmm</maven.build.timestamp.format>
    </properties>

    <modules>
        <module>storm-client-bin</module>
        <module>storm-webapp-bin</module>
        <module>storm-autocreds-bin</module>
        <module>storm-sql-core-bin</module>
        <module>storm-sql-runtime-bin</module>
        <module>storm-submit-tools-bin</module>
        <module>storm-kafka-monitor-bin</module>
        <!-- Final package must be last, as it needs to copy files from the other modules -->
        <module>final-package</module>
    </modules>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>license-maven-plugin</artifactId>
                <inherited>false</inherited>
                <configuration>
                    <missingFile>${project.basedir}/../../THIRD-PARTY.properties</missingFile>
                    <aggregateMissingLicensesFile>${project.basedir}/../../THIRD-PARTY.properties</aggregateMissingLicensesFile>
                </configuration>
                <executions>
                    <execution>
                        <id>generate-and-check-licenses</id>
                        <goals>
                            <goal>aggregate-add-third-party</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
