1 package org.apache.maven.artifact.deployer;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.Map;
24 import java.util.concurrent.ConcurrentHashMap;
25
26 import org.apache.maven.RepositoryUtils;
27 import org.apache.maven.artifact.Artifact;
28 import org.apache.maven.artifact.metadata.ArtifactMetadata;
29 import org.apache.maven.artifact.repository.ArtifactRepository;
30 import org.apache.maven.artifact.repository.DefaultArtifactRepository;
31 import org.apache.maven.artifact.repository.LegacyLocalRepositoryManager;
32 import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
33 import org.apache.maven.artifact.repository.metadata.MetadataBridge;
34 import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
35 import org.apache.maven.plugin.LegacySupport;
36 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
37 import org.codehaus.plexus.component.annotations.Component;
38 import org.codehaus.plexus.component.annotations.Requirement;
39 import org.codehaus.plexus.logging.AbstractLogEnabled;
40 import org.eclipse.aether.RepositorySystem;
41 import org.eclipse.aether.RepositorySystemSession;
42 import org.eclipse.aether.RequestTrace;
43 import org.eclipse.aether.deployment.DeployRequest;
44 import org.eclipse.aether.deployment.DeployResult;
45 import org.eclipse.aether.deployment.DeploymentException;
46 import org.eclipse.aether.metadata.MergeableMetadata;
47 import org.eclipse.aether.repository.RemoteRepository;
48 import org.eclipse.aether.util.artifact.SubArtifact;
49
50 @Component( role = ArtifactDeployer.class, instantiationStrategy = "per-lookup" )
51 public class DefaultArtifactDeployer
52 extends AbstractLogEnabled
53 implements ArtifactDeployer
54 {
55
56 @Requirement
57 private RepositorySystem repoSystem;
58
59 @Requirement
60 private LegacySupport legacySupport;
61
62 private Map<Object, MergeableMetadata> relatedMetadata = new ConcurrentHashMap<Object, MergeableMetadata>();
63
64
65
66
67
68 @Deprecated
69 public void deploy( String basedir, String finalName, Artifact artifact, ArtifactRepository deploymentRepository,
70 ArtifactRepository localRepository )
71 throws ArtifactDeploymentException
72 {
73 String extension = artifact.getArtifactHandler().getExtension();
74 File source = new File( basedir, finalName + "." + extension );
75 deploy( source, artifact, deploymentRepository, localRepository );
76 }
77
78 public void deploy( File source, Artifact artifact, ArtifactRepository deploymentRepository,
79 ArtifactRepository localRepository )
80 throws ArtifactDeploymentException
81 {
82 RepositorySystemSession session =
83 LegacyLocalRepositoryManager.overlay( localRepository, legacySupport.getRepositorySession(), repoSystem );
84
85 DeployRequest request = new DeployRequest();
86
87 request.setTrace( RequestTrace.newChild( null, legacySupport.getSession().getCurrentProject() ) );
88
89 org.eclipse.aether.artifact.Artifact mainArtifact = RepositoryUtils.toArtifact( artifact );
90 mainArtifact = mainArtifact.setFile( source );
91 request.addArtifact( mainArtifact );
92
93 String versionKey = artifact.getGroupId() + ':' + artifact.getArtifactId();
94 String snapshotKey = null;
95 if ( artifact.isSnapshot() )
96 {
97 snapshotKey = versionKey + ':' + artifact.getBaseVersion();
98 request.addMetadata( relatedMetadata.get( snapshotKey ) );
99 }
100 request.addMetadata( relatedMetadata.get( versionKey ) );
101
102 for ( ArtifactMetadata metadata : artifact.getMetadataList() )
103 {
104 if ( metadata instanceof ProjectArtifactMetadata )
105 {
106 org.eclipse.aether.artifact.Artifact pomArtifact = new SubArtifact( mainArtifact, "", "pom" );
107 pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
108 request.addArtifact( pomArtifact );
109 }
110 else if ( metadata instanceof SnapshotArtifactRepositoryMetadata
111 || metadata instanceof ArtifactRepositoryMetadata )
112 {
113
114 }
115 else
116 {
117 request.addMetadata( new MetadataBridge( metadata ) );
118 }
119 }
120
121 RemoteRepository remoteRepo = RepositoryUtils.toRepo( deploymentRepository );
122
123
124
125
126 if ( deploymentRepository instanceof DefaultArtifactRepository
127 && deploymentRepository.getAuthentication() == null )
128 {
129 RemoteRepository.Builder builder = new RemoteRepository.Builder( remoteRepo );
130 builder.setAuthentication( session.getAuthenticationSelector().getAuthentication( remoteRepo ) );
131 builder.setProxy( session.getProxySelector().getProxy( remoteRepo ) );
132 remoteRepo = builder.build();
133 }
134 request.setRepository( remoteRepo );
135
136 DeployResult result;
137 try
138 {
139 result = repoSystem.deploy( session, request );
140 }
141 catch ( DeploymentException e )
142 {
143 throw new ArtifactDeploymentException( e.getMessage(), e );
144 }
145
146 for ( Object metadata : result.getMetadata() )
147 {
148 if ( metadata.getClass().getName().endsWith( ".internal.VersionsMetadata" ) )
149 {
150 relatedMetadata.put( versionKey, (MergeableMetadata) metadata );
151 }
152 if ( snapshotKey != null && metadata.getClass().getName().endsWith( ".internal.RemoteSnapshotMetadata" ) )
153 {
154 relatedMetadata.put( snapshotKey, (MergeableMetadata) metadata );
155 }
156 }
157
158 artifact.setResolvedVersion( result.getArtifacts().iterator().next().getVersion() );
159 }
160
161 }