<?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.2.0</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>
        <license.thirdPartyFilename>THIRD-PARTY.txt</license.thirdPartyFilename>
        <license.outputDirectory>${project.build.directory}/generated-sources/license</license.outputDirectory>
    </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>
