<!--
  ~ Copyright 2001-2006 The Apache Software Foundation.
  ~
  ~ Licensed 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>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <outputDirectory>${basedir}/target/test-harness/assembly/NoSuchArchiverException/target</outputDirectory>
          <finalName>assembly</finalName>
          <workDirectory>${basedir}/target/test-harness/assembly/NoSuchArchiverException/work</workDirectory>
          <archiverManager implementation="org.apache.maven.plugin.assembly.stubs.ArchiverManagerStub" />
          <localRepository>${localRepository}</localRepository>
          <reactorProjects></reactorProjects>
          <classifier></classifier>
          <project implementation="org.apache.maven.plugin.assembly.stubs.AssemblyMavenProjectStub" />
          <executedProject implementation="org.apache.maven.plugin.assembly.stubs.AssemblyMavenProjectStub" />
          <descriptor>${basedir}/src/test/resources/assemblies/NoSuchArchiverException.xml</descriptor>
          <tarLongFileMode>warn</tarLongFileMode>
          <basedir>${basedir}</basedir>
          <tempRoot>${basedir}/target/test-harness/assembly/NoSuchArchiverException/archive-tmp</tempRoot>
          <siteDirectory>${basedir}/target/test-harness/assembly/NoSuchArchiverException/site</siteDirectory>
          <includeSite>false</includeSite>
          <appendAssemblyId>false</appendAssemblyId>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
