Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Sonatype Nexus (TM) Open Source Version
   * Copyright (c) 2007-2013 Sonatype, Inc.
   * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions.
   *
   * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0,
   * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html.
   *
   * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks
  * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the
  * Eclipse Foundation. All other trademarks are the property of their respective owners.
  */
 
 package org.sonatype.nexus.maven.staging.deploy.strategy;
 
 import java.io.File;
 import java.util.List;
 
 
 
 import  org.apache.maven.artifact.repository.ArtifactRepository;
 
 import static com.google.common.base.Preconditions.checkNotNull;

Full staging V2 deploy strategy. It perform local staging and remote staging (on remote Nexus).

Author(s):
cstamas
Since:
1.1
 
 @Component(role = DeployStrategy.class, hint = .)
 public class StagingDeployStrategy
 {

  
Performs local staging, but obeying the matched staging profile (to keep locally staged artifacts separated, as they will end up in Nexus). For this, several REST calls are made against Nexus, to perform staging profile match if needed.
 
   @Override
   public void deployPerModule(final DeployPerModuleRequest request)
   {
     getLogger().info(
         "Performing local staging (local stagingDirectory=\""
             + request.getParameters().getStagingDirectoryRoot().getAbsolutePath() + "\")...");
     if (!request.getDeployableArtifacts().isEmpty()) {
       // we match only for 1st in list!
       final RemoteNexus remoteNexus = createRemoteNexus(request.getMavenSession(), request.getParameters());
       request.setRemoteNexus(remoteNexus); // to reuse if this module is last and will perform finalizeDeploy too
       final String profileId =
           selectStagingProfile(request.getParameters(), remoteNexus,
               request.getDeployableArtifacts().get(0).getArtifact());
       final File stagingDirectory =
           getStagingDirectory(request.getParameters().getStagingDirectoryRoot(), profileId);
       // deploys always to same stagingDirectory
       for (DeployableArtifact deployableArtifact : request.getDeployableArtifacts()) {
         final ArtifactRepository stagingRepository = getArtifactRepositoryForDirectory(stagingDirectory);
         install(deployableArtifact.getFile(), deployableArtifact.getArtifact(), stagingRepository,
             stagingDirectory);
       }
     }
     else {
       getLogger().info("Nothing to locally stage?");
     }
   }

  
Performs Nexus staging of locally staged artifacts.
 
   @Override
   public void finalizeDeploy(final FinalizeDeployRequest request)
   {
     getLogger().info("Performing remote staging...");
    final File stageRoot = request.getParameters().getStagingDirectoryRoot();
    final File[] localStageRepositories = stageRoot.listFiles();
    if (localStageRepositories == null) {
      getLogger().info("We have nothing locally staged, bailing out.");
      return;
    }
    final RemoteNexus remoteNexus = checkNotNull(request.getRemoteNexus(),
        "BUG: finalizeDeploy invoked before deployPerModule?");
    final List<StagingRepositoryzappedStagingRepositories = new ArrayList<StagingRepository>();
    for (File profileDirectory : localStageRepositories) {
      if (!profileDirectory.isDirectory()) {
        continue;
      }
      // we do remote staging
      final String profileId = profileDirectory.getName();
      getLogger().info("");
      getLogger().info(" * Remote staging into staging profile ID \"" + profileId + "\"");
      try {
        final Profile stagingProfile = remoteNexus.getStagingWorkflowV2Service().selectProfile(profileId);
        final StagingRepository stagingRepository = beforeUpload(request.getParameters(), remoteNexusstagingProfile);
        zappedStagingRepositories.add(stagingRepository);
        getLogger().info(" * Uploading locally staged artifacts to profile " + stagingProfile.name());
            profileId),
            createDeploymentArtifactRepository(remoteNexus.getServer().getId(), stagingRepository.getUrl()));
        getLogger().info(" * Upload of locally staged artifacts finished.");
        afterUpload(request.getParameters(), remoteNexusstagingRepository);
      }
      catch (NexusClientNotFoundException e) {
        afterUploadFailure(request.getParameters(), remoteNexuszappedStagingRepositoriese);
        getLogger().error("Remote staging finished with a failure: " + e.getMessage());
        getLogger().error("");
        getLogger().error("Possible causes of 404 Not Found error:");
        getLogger().error(
            " * your local workspace is \"dirty\" with previous runs, that locally staged artifacts? Run \"mvn clean\"...");
        getLogger().error(
            " * remote Nexus got the profile with ID \"" + profileId
                + "\" removed during this build? Get to Nexus admin...");
        throw new ArtifactDeploymentException("Remote staging failed: " + e.getMessage(), e);
      }
      catch (NexusClientAccessForbiddenException e) {
        afterUploadFailure(request.getParameters(), remoteNexuszappedStagingRepositoriese);
        getLogger().error("Remote staging finished with a failure: " + e.getMessage());
        getLogger().error("");
        getLogger().error("Possible causes of 403 Forbidden:");
        getLogger().error(
            " * you have no permissions to stage against profile with ID \"" + profileId
                + "\"? Get to Nexus admin...");
        throw new ArtifactDeploymentException("Remote staging failed: " + e.getMessage(), e);
      }
      catch (Exception e) {
        afterUploadFailure(request.getParameters(), remoteNexuszappedStagingRepositoriese);
        getLogger().error("Remote staging finished with a failure: " + e.getMessage());
        throw new ArtifactDeploymentException("Remote staging failed: " + e.getMessage(), e);
      }
    }
    getLogger().info(
        "Remote staged " + zappedStagingRepositories.size() + " repositories, finished with success.");
      releaseAfterClose(request.getParameters(), remoteNexuszappedStagingRepositories);
    }
  }
  protected void releaseAfterClose(final Parameters parametersfinal RemoteNexus remoteNexus,
                                   final List<StagingRepositorystagedRepositories)
      throws MojoExecutionException
  {
    getLogger().info("Remote staging repositories are being released...");
    final List<StringstagedRepositoryIds = Lists.newArrayList(Collections2.transform(stagedRepositories,
        new Function<StagingRepositoryString>()
        {
          @Override
          public String apply(StagingRepository input) {
            return input.getRepositoryId();
          }
        }));
    final StagingWorkflowV2Service stagingWorkflow = remoteNexus.getStagingWorkflowV2Service();
    try {
      if (stagingWorkflow instanceof StagingWorkflowV3Service) {
        final StagingWorkflowV3Service v3 = (StagingWorkflowV3ServicestagingWorkflow;
        StagingActionDTO action = new StagingActionDTO();
        action.setDescription(parameters.getActionDescription(.));
        action.setStagedRepositoryIds(stagedRepositoryIds);
        action.setAutoDropAfterRelease(parameters.isAutoDropAfterRelease());
        v3.releaseStagingRepositories(action);
      }
      else {
        stagingWorkflow.releaseStagingRepositories(parameters.getActionDescription(.),
            stagedRepositoryIds.toArray(new String[stagedRepositoryIds.size()]));
      }
    }
      ErrorDumper.dumpErrors(getLogger(), e);
      // fail the build
      throw new MojoExecutionException("Could not perform action: Nexus ErrorResponse received!"e);
    }
    catch (StagingRuleFailuresException e) {
      ErrorDumper.dumpErrors(getLogger(), e);
      // fail the build
      throw new MojoExecutionException("Could not perform action: there are failing staging rules!"e);
    }
    getLogger().info("Remote staging repositories released.");
  }
New to GrepCode? Check out our FAQ X