View Javadoc
1   package org.apache.maven.shared.transfer.artifact.deploy.internal;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.util.Collection;
23  
24  import org.apache.maven.RepositoryUtils;
25  import org.apache.maven.artifact.metadata.ArtifactMetadata;
26  import org.apache.maven.artifact.repository.ArtifactRepository;
27  import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
28  import org.apache.maven.project.artifact.ProjectArtifactMetadata;
29  import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
30  import org.apache.maven.shared.transfer.metadata.internal.Maven30MetadataBridge;
31  import org.sonatype.aether.RepositorySystem;
32  import org.sonatype.aether.RepositorySystemSession;
33  import org.sonatype.aether.artifact.Artifact;
34  import org.sonatype.aether.deployment.DeployRequest;
35  import org.sonatype.aether.deployment.DeploymentException;
36  import org.sonatype.aether.repository.RemoteRepository;
37  import org.sonatype.aether.util.artifact.SubArtifact;
38  
39  /**
40   * 
41   */
42  class Maven30ArtifactDeployer
43      implements MavenArtifactDeployer
44  {
45  
46      private final RepositorySystem repositorySystem;
47      
48      private final RepositorySystemSession session;
49      
50      Maven30ArtifactDeployer( RepositorySystem repositorySystem, RepositorySystemSession session )
51      {
52          this.repositorySystem = repositorySystem;
53          this.session = session;
54      }
55  
56      @Override
57      public void deploy( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
58                              throws ArtifactDeployerException
59      {
60          deploy( null, mavenArtifacts );
61      }
62  
63      @Override
64      public void deploy( ArtifactRepository remoteRepository,
65                          Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
66                              throws ArtifactDeployerException
67      {
68          // prepare request
69          DeployRequest request = new DeployRequest();
70  
71          RemoteRepository defaultRepository = null;
72  
73          if ( remoteRepository != null )
74          {
75              defaultRepository = getRemoteRepository( session, remoteRepository );
76          }
77  
78          // transform artifacts
79          for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
80          {
81              Artifact aetherArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
82                                         org.apache.maven.artifact.Artifact.class, mavenArtifact );
83              request.addArtifact( aetherArtifact );
84  
85              RemoteRepository aetherRepository;
86              if ( remoteRepository == null )
87              {
88                  aetherRepository = getRemoteRepository( session, mavenArtifact.getRepository() );
89              }
90              else
91              {
92                  aetherRepository = defaultRepository;
93              }
94  
95              request.setRepository( aetherRepository );
96  
97              for ( ArtifactMetadata metadata : mavenArtifact.getMetadataList() )
98              {
99                  if ( metadata instanceof ProjectArtifactMetadata )
100                 {
101                     Artifact pomArtifact = new SubArtifact( aetherArtifact, "", "pom" );
102                     pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
103                     request.addArtifact( pomArtifact );
104                 }
105                 else if ( // metadata instanceof SnapshotArtifactRepositoryMetadata ||
106                 metadata instanceof ArtifactRepositoryMetadata )
107                 {
108                     // eaten, handled by repo system
109                 }
110                 else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
111                 {
112                     org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMedata =
113                                     ( org.apache.maven.shared.transfer.metadata.ArtifactMetadata ) metadata;
114                     
115                     request.addMetadata( new Maven30MetadataBridge( metadata ).setFile( transferMedata.getFile() ) );
116                 }
117             }
118         }
119 
120         // deploy
121         try
122         {
123             repositorySystem.deploy( session, request );
124         }
125         catch ( DeploymentException e )
126         {
127             throw new ArtifactDeployerException( e.getMessage(), e );
128         }
129     }
130 
131     private RemoteRepository getRemoteRepository( RepositorySystemSession session, ArtifactRepository remoteRepository )
132         throws ArtifactDeployerException
133     {
134         RemoteRepository aetherRepo = Invoker.invoke( RepositoryUtils.class, "toRepo",
135                                                                          ArtifactRepository.class,
136                                                                          remoteRepository );
137 
138         if ( aetherRepo.getAuthentication() == null )
139         {
140             aetherRepo.setAuthentication( session.getAuthenticationSelector().getAuthentication( aetherRepo ) );
141         }
142 
143         if ( aetherRepo.getProxy() == null )
144         {
145             aetherRepo.setProxy( session.getProxySelector().getProxy( aetherRepo ) );
146         }
147 
148         return aetherRepo;
149     }
150 }