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

<project>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <configuration>
          <project implementation="org.apache.maven.plugins.deploy.stubs.MavenProjectStub">
            <file>${basedir}/src/test/resources/unit/basic-deploy-scp/plugin-config.xml</file>
            <packaging>jar</packaging>
            <artifact implementation="org.apache.maven.plugins.deploy.stubs.DeployArtifactStub" />
            <attachedArtifacts />
            <deploymentRepository implementation="org.apache.maven.plugins.deploy.stubs.ArtifactRepositoryStub2" />
          </project>
          <deployer implementation="org.apache.maven.plugins.deploy.stubs.ArtifactDeployerStub" />
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
