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.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
69 DeployRequest request = new DeployRequest();
70
71 RemoteRepository defaultRepository = null;
72
73 if ( remoteRepository != null )
74 {
75 defaultRepository = getRemoteRepository( session, remoteRepository );
76 }
77
78
79 for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
80 {
81 Artifact aetherArtifact =
82 (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
83 org.apache.maven.artifact.Artifact.class, mavenArtifact );
84 request.addArtifact( aetherArtifact );
85
86 RemoteRepository aetherRepository;
87 if ( remoteRepository == null )
88 {
89 aetherRepository = getRemoteRepository( session, mavenArtifact.getRepository() );
90 }
91 else
92 {
93 aetherRepository = defaultRepository;
94 }
95
96 request.setRepository( aetherRepository );
97
98 for ( ArtifactMetadata metadata : mavenArtifact.getMetadataList() )
99 {
100 if ( metadata instanceof ProjectArtifactMetadata )
101 {
102 Artifact pomArtifact = new SubArtifact( aetherArtifact, "", "pom" );
103 pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
104 request.addArtifact( pomArtifact );
105 }
106 else if (
107 metadata instanceof ArtifactRepositoryMetadata )
108 {
109
110 }
111 else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
112 {
113 org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMedata =
114 ( org.apache.maven.shared.transfer.metadata.ArtifactMetadata ) metadata;
115
116 request.addMetadata( new Maven30MetadataBridge( metadata ).setFile( transferMedata.getFile() ) );
117 }
118 }
119 }
120
121
122 try
123 {
124 repositorySystem.deploy( session, request );
125 }
126 catch ( DeploymentException e )
127 {
128 throw new ArtifactDeployerException( e.getMessage(), e );
129 }
130 }
131
132 private RemoteRepository getRemoteRepository( RepositorySystemSession session, ArtifactRepository remoteRepository )
133 throws ArtifactDeployerException
134 {
135
136 RemoteRepository aetherRepo = (RemoteRepository) Invoker.invoke( RepositoryUtils.class, "toRepo",
137 org.apache.maven.artifact.repository.ArtifactRepository.class,
138 remoteRepository );
139
140
141 if ( aetherRepo.getAuthentication() == null )
142 {
143 aetherRepo.setAuthentication( session.getAuthenticationSelector().getAuthentication( aetherRepo ) );
144 }
145
146 if ( aetherRepo.getProxy() == null )
147 {
148 aetherRepo.setProxy( session.getProxySelector().getProxy( aetherRepo ) );
149 }
150
151 return aetherRepo;
152 }
153 }