1 package org.apache.maven.shared.transfer.artifact.deploy.internal;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
70 DeployRequest request = new DeployRequest();
71
72 RemoteRepository defaultRepository = null;
73
74 if ( remoteRepository != null )
75 {
76 defaultRepository = getRemoteRepository( session, remoteRepository );
77 }
78
79
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 (
108 metadata instanceof ArtifactRepositoryMetadata )
109 {
110
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
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
137 RemoteRepository aetherRepo = (RemoteRepository) Invoker.invoke( RepositoryUtils.class, "toRepo",
138 org.apache.maven.artifact.repository.ArtifactRepository.class,
139 remoteRepository );
140
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 }