<?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/plugins/maven-assembly-plugin/assembly/1.1.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>bin</id>
    <formats>
        <format>dir</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    
    <files>
      <file>
        <source>${localRepository}/org/apache/maven/plugins/maven-assembly-plugin/${testVersion}/maven-assembly-plugin-${testVersion}.jar</source>
        <outputDirectory>unprefixed</outputDirectory>
        <destName>maven-assembly-plugin.jar</destName>
      </file>
      <file>
        <source>${settings.localRepository}/org/apache/maven/plugins/maven-assembly-plugin/${testVersion}/maven-assembly-plugin-${testVersion}.jar</source>
        <outputDirectory>prefixed</outputDirectory>
        <destName>maven-assembly-plugin.jar</destName>
      </file>
    </files>
</assembly>
