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.Maven31MetadataBridge;
31  import org.eclipse.aether.RepositorySystem;
32  import org.eclipse.aether.RepositorySystemSession;
33  import org.eclipse.aether.artifact.Artifact;
34  import org.eclipse.aether.deployment.DeployRequest;
35  import org.eclipse.aether.deployment.DeploymentException;
36  import org.eclipse.aether.repository.RemoteRepository;
37  import org.eclipse.aether.util.artifact.SubArtifact;
38  
39  /**
40   * 
41   */
42  class Maven31ArtifactDeployer
43      implements MavenArtifactDeployer
44  {
45  
46      private final RepositorySystem repositorySystem;
47      
48      private final RepositorySystemSession session;
49      
50      Maven31ArtifactDeployer( RepositorySystem repositorySystem, RepositorySystemSession session )
51      {
52          super();
53          this.repositorySystem = repositorySystem;
54          this.session = session;
55      }
56  
57      @Override
58      public void deploy( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
59                              throws ArtifactDeployerException
60      {
61          deploy( null, mavenArtifacts );
62      }
63  
64      @Override
65      public void deploy( ArtifactRepository remoteRepository,
66                          Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
67                              throws ArtifactDeployerException
68      {
69          // prepare request
70          DeployRequest request = new DeployRequest();
71  
72          RemoteRepository defaultRepository = null;
73  
74          if ( remoteRepository != null )
75          {
76              defaultRepository = getRemoteRepository( session, remoteRepository );
77          }
78  
79          // transform artifacts
80          for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
81          {
82              Artifact aetherArtifact =
83                  (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
84                                             org.apache.maven.artifact.Artifact.class, mavenArtifact );
85              request.addArtifact( aetherArtifact );
86  
87              RemoteRepository aetherRepository;
88              if ( remoteRepository == null )
89              {
90                  aetherRepository = getRemoteRepository( session, mavenArtifact.getRepository() );
91              }
92              else
93              {
94                  aetherRepository = defaultRepository;
95              }
96  
97              request.setRepository( aetherRepository );
98  
99              for ( ArtifactMetadata metadata : mavenArtifact.getMetadataList() )
100             {
101                 if ( metadata instanceof ProjectArtifactMetadata )
102                 {
103                     Artifact pomArtifact = new SubArtifact( aetherArtifact, "", "pom" );
104                     pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
105                     request.addArtifact( pomArtifact );
106                 }
107                 else if ( // metadata instanceof SnapshotArtifactRepositoryMetadata ||
108                 metadata instanceof ArtifactRepositoryMetadata )
109                 {
110                     // eaten, handled by repo system
111                 }
112                 else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
113                 {
114                     org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMetadata = 
115                                     (org.apache.maven.shared.transfer.metadata.ArtifactMetadata) metadata;
116                     
117                     request.addMetadata( new Maven31MetadataBridge( metadata ).setFile( transferMetadata.getFile() ) );
118                 }
119             }
120         }
121 
122         // deploy
123         try
124         {
125             repositorySystem.deploy( session, request );
126         }
127         catch ( DeploymentException e )
128         {
129             throw new ArtifactDeployerException( e.getMessage(), e );
130         }
131     }
132 
133     private RemoteRepository getRemoteRepository( RepositorySystemSession session, ArtifactRepository remoteRepository )
134         throws ArtifactDeployerException
135     {
136         // CHECKSTYLE_OFF: LineLength
137         RemoteRepository aetherRepo = (RemoteRepository) Invoker.invoke( RepositoryUtils.class, "toRepo",
138                                                                          org.apache.maven.artifact.repository.ArtifactRepository.class,
139                                                                          remoteRepository );
140         // CHECKSTYLE_ON: LineLength
141 
142         if ( aetherRepo.getAuthentication() == null || aetherRepo.getProxy() == null )
143         {
144             RemoteRepository.Builder builder = new RemoteRepository.Builder( aetherRepo );
145 
146             if ( aetherRepo.getAuthentication() == null )
147             {
148                 builder.setAuthentication( session.getAuthenticationSelector().getAuthentication( aetherRepo ) );
149             }
150 
151             if ( aetherRepo.getProxy() == null )
152             {
153                 builder.setProxy( session.getProxySelector().getProxy( aetherRepo ) );
154             }
155 
156             aetherRepo = builder.build();
157         }
158 
159         return aetherRepo;
160     }
161 }