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