1 package org.apache.maven.artifact.ant;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.artifact.Artifact;
23 import org.apache.maven.artifact.deployer.ArtifactDeployer;
24 import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
25 import org.apache.maven.artifact.metadata.ArtifactMetadata;
26 import org.apache.maven.artifact.repository.ArtifactRepository;
27 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
28 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
29 import org.apache.maven.model.DistributionManagement;
30 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
31 import org.apache.tools.ant.BuildException;
32
33 import java.util.Iterator;
34
35
36
37
38
39
40
41 public class DeployTask
42 extends InstallDeployTaskSupport
43 {
44 private RemoteRepository remoteRepository;
45
46 private RemoteRepository remoteSnapshotRepository;
47
48 private boolean uniqueVersion = true;
49
50
51
52
53
54
55 protected ArtifactRepository createDeploymentArtifactRepository( RemoteRepository repository )
56 {
57 if ( repository.getId().equals( repository.getUrl() ) )
58 {
59
60 repository.setId( "remote" );
61 }
62
63 updateRepositoryWithSettings( repository );
64
65 ArtifactRepositoryLayout repositoryLayout =
66 (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, repository.getLayout() );
67
68 ArtifactRepositoryFactory repositoryFactory = null;
69
70 ArtifactRepository artifactRepository;
71
72 try
73 {
74 repositoryFactory = getArtifactRepositoryFactory( repository );
75
76 artifactRepository =
77 repositoryFactory.createDeploymentArtifactRepository( repository.getId(), repository.getUrl(),
78 repositoryLayout, uniqueVersion );
79 }
80 finally
81 {
82 releaseArtifactRepositoryFactory( repositoryFactory );
83 }
84
85 return artifactRepository;
86 }
87
88
89 protected void doExecute()
90 {
91 ArtifactRepository localRepo = createLocalArtifactRepository();
92
93 Pom pom = buildPom( localRepo );
94
95 if ( pom == null )
96 {
97 throw new BuildException( "A POM element is required to deploy to the repository" );
98 }
99
100 Artifact artifact = pom.getArtifact();
101
102
103 boolean isPomArtifact = "pom".equals( pom.getPackaging() );
104 if ( !isPomArtifact )
105 {
106 ArtifactMetadata metadata = new ProjectArtifactMetadata( artifact, pom.getFile() );
107 artifact.addMetadata( metadata );
108 }
109
110 ArtifactRepository deploymentRepository = getDeploymentRepository( pom, artifact );
111
112 log( "Deploying to " + deploymentRepository.getUrl() );
113 ArtifactDeployer deployer = (ArtifactDeployer) lookup( ArtifactDeployer.ROLE );
114 try
115 {
116 if ( !isPomArtifact )
117 {
118 if ( file == null )
119 {
120 throw new BuildException( "You must specify a file to deploy to the repository." );
121 }
122
123 deployer.deploy( file, artifact, deploymentRepository, localRepo );
124 }
125 else
126 {
127 deployer.deploy( pom.getFile(), artifact, deploymentRepository, localRepo );
128 }
129
130
131 if ( attachedArtifacts != null )
132 {
133 Iterator iter = pom.getAttachedArtifacts().iterator();
134
135 while ( iter.hasNext() )
136 {
137 Artifact attachedArtifact = (Artifact) iter.next();
138 deployer.deploy( attachedArtifact.getFile(), attachedArtifact, deploymentRepository, localRepo );
139 }
140 }
141 }
142 catch ( ArtifactDeploymentException e )
143 {
144 throw new BuildException(
145 "Error deploying artifact '" + artifact.getDependencyConflictId() + "': " + e.getMessage(), e );
146 }
147 }
148
149 private ArtifactRepository getDeploymentRepository( Pom pom, Artifact artifact )
150 {
151 DistributionManagement distributionManagement = pom.getDistributionManagement();
152
153 if ( remoteSnapshotRepository == null && remoteRepository == null )
154 {
155 if ( distributionManagement != null )
156 {
157 if ( distributionManagement.getSnapshotRepository() != null )
158 {
159 remoteSnapshotRepository = createAntRemoteRepositoryBase( distributionManagement
160 .getSnapshotRepository() );
161 uniqueVersion = distributionManagement.getSnapshotRepository().isUniqueVersion();
162 }
163 if ( distributionManagement.getRepository() != null )
164 {
165 remoteRepository = createAntRemoteRepositoryBase( distributionManagement.getRepository() );
166 }
167 }
168 }
169
170 if ( remoteSnapshotRepository == null )
171 {
172 remoteSnapshotRepository = remoteRepository;
173 }
174
175 ArtifactRepository deploymentRepository;
176 if ( artifact.isSnapshot() && remoteSnapshotRepository != null )
177 {
178 deploymentRepository = createDeploymentArtifactRepository( remoteSnapshotRepository );
179 }
180 else if ( remoteRepository != null )
181 {
182 deploymentRepository = createDeploymentArtifactRepository( remoteRepository );
183 }
184 else
185 {
186 throw new BuildException(
187 "A distributionManagement element or remoteRepository element is required to deploy" );
188 }
189
190 return deploymentRepository;
191 }
192
193 public RemoteRepository getRemoteRepository()
194 {
195 return remoteRepository;
196 }
197
198 public void addRemoteSnapshotRepository( RemoteRepository remoteSnapshotRepository )
199 {
200 this.remoteSnapshotRepository = remoteSnapshotRepository;
201 }
202
203 public void addRemoteRepository( RemoteRepository remoteRepository )
204 {
205 this.remoteRepository = remoteRepository;
206 }
207
208 public void setUniqueVersion( boolean uniqueVersion )
209 {
210 this.uniqueVersion = uniqueVersion;
211 }
212
213 public boolean getUniqueVersion()
214 {
215 return uniqueVersion;
216 }
217 }