<?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.
-->

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
  <id>bin</id>
  <formats>
    <format>zip</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <useProjectArtifact>false</useProjectArtifact>
      <includes>
        <include>org.apache.maven.wrapper:maven-wrapper:jar:*</include>
      </includes>
      <outputDirectory>.mvn/wrapper</outputDirectory>
      <outputFileNameMapping>maven-wrapper.jar</outputFileNameMapping>
    </dependencySet>
  </dependencySets>
  <files>
    <file>
      <source>src/assembly/shared/mvnwDebug.cmd</source>
      <outputDirectory>.</outputDirectory>
      <lineEnding>dos</lineEnding>
    </file>
    <file>
      <source>src/assembly/shared/mvnwDebug</source>
      <outputDirectory>.</outputDirectory>
      <lineEnding>unix</lineEnding>
      <fileMode>0755</fileMode>
    </file>
    <file>
      <sources>
        <source>src/assembly/maven/validate.cmd</source>
        <source>src/assembly/maven/init.cmd</source>
        <source>src/assembly/shared/mvnwlauncher.cmd</source>
        <source>src/assembly/maven/run.cmd</source>
      </sources>
      <destName>mvnw.cmd</destName>
      <outputDirectory>.</outputDirectory>
      <lineEnding>dos</lineEnding>
      <filtered>true</filtered>
    </file>
    <file>
      <sources>
        <source>src/assembly/maven/validate</source>
        <source>src/assembly/maven/init</source>
        <source>src/assembly/shared/mvnwlauncher</source>
        <source>src/assembly/maven/run</source>
      </sources>
      <destName>mvnw</destName>
      <outputDirectory>.</outputDirectory>
      <lineEnding>unix</lineEnding>
      <fileMode>0755</fileMode>
      <filtered>true</filtered>
    </file>
  </files>
  <fileSets>
    <fileSet>
      <directory>src/assembly/shared/mvn</directory>
      <outputDirectory>.mvn</outputDirectory>
      <filtered>true</filtered>
    </fileSet>
  </fileSets>
</assembly>
