<!--
  ~ 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/tbz2/target</outputDirectory>
          <finalName>assembly</finalName>
          <workDirectory>${basedir}/target/test-harness/assembly/tbz2/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/tbz2.xml</descriptor>
          <tarLongFileMode>fail</tarLongFileMode>
          <basedir>${basedir}</basedir>
          <tempRoot>${basedir}/target/test-harness/assembly/tbz2/archive-tmp</tempRoot>
          <siteDirectory>${basedir}/target/test-harness/assembly/tbz2/site</siteDirectory>
          <includeSite>false</includeSite>
          <appendAssemblyId>false</appendAssemblyId>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
<!--
  ~ 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/tbz2/target</outputDirectory>
          <finalName>assembly</finalName>
          <workDirectory>${basedir}/target/test-harness/assembly/tbz2/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/tbz2.xml</descriptor>
          <tarLongFileMode>fail</tarLongFileMode>
          <basedir>${basedir}</basedir>
          <tempRoot>${basedir}/target/test-harness/assembly/tbz2/archive-tmp</tempRoot>
          <siteDirectory>${basedir}/target/test-harness/assembly/tbz2/site</siteDirectory>
          <includeSite>false</includeSite>
          <appendAssemblyId>false</appendAssemblyId>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
