 -----
 Deploy a Project
 -----
 Karl Heinz Marbaise
 -----
 2017-08-20
 -----

 ~~ 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.

 ~~ NOTE: For help with the syntax of this file, see:
 ~~ http://maven.apache.org/doxia/references/apt-format.html

Deploy a Project

  If you are developing a Maven plugin, you need often to deploy a whole project 
  into a repository, which is a little bit cumbersome.
  
  With this component, this can be easily done via the following code parts:

+---  
   @Parameter ( defaultValue = "${session}", required = true, readonly = true )
   private MavenSession session;
   @Parameter ( defaultValue = "${project}", required = true, readonly = true )
   private MavenProject project;

   @Component
   private ProjectDeployer deployer;
   ...
   public void execute()
   {
      
      ProjectDeployerRequest pdr =
           new ProjectDeployerRequest()
           //TODO: Think about setUpdateReleaseInfo()..
             .setProject( project ).setUpdateReleaseInfo( true );
             
      deployer.deploy( session.getProjectBuildingRequest(), pdr );
      ...
   }
   
+---

   
   