<?xml version="1.0"?>
<!--
   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.
-->
<assembly>
  <id>dist</id>
  <formats>
    <format>dir</format>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <files>
    <file>
      <fileMode>644</fileMode>
      <source>${project.build.directory}/${artifact.artifactId}-simulator-${artifact.version}.jar</source>
      <outputDirectory>ambari-metrics-${project.version}/lib/ambari-metrics</outputDirectory>
    </file>
  </files>
  <fileSets>
    <!--
        Adds startup scripts to the root directory of zip package. The startup
        scripts are located to src/main/scripts directory as stated by Maven
        conventions.
    -->
    <fileSet>
      <directory>${basedir}/src/main/resources/scripts</directory>
      <outputDirectory>ambari-metrics-${project.version}/bin</outputDirectory>
      <includes>
        <include>*.sh</include>
      </includes>
      <fileMode>0755</fileMode>
    </fileSet>
    <!-- adds jar package to the root directory of zip package -->
<!--    <fileSet>
      <directory>${project.build.directory}</directory>
      <outputDirectory></outputDirectory>
      <includes>
        <include>*.jar</include>
      </includes>
    </fileSet>-->
  </fileSets>


  <dependencySets>
    <dependencySet>
      <fileMode>755</fileMode>
      <outputDirectory>ambari-metrics-${project.version}/lib/ambari-metrics</outputDirectory>
<!--
      <useProjectArtifact>false</useProjectArtifact>
-->
      <unpack>false</unpack>
      <scope>compile</scope>

    </dependencySet>
  </dependencySets>

</assembly>
