1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.release.phase;
20
21 import java.util.List;
22
23 import org.apache.maven.artifact.ArtifactUtils;
24 import org.apache.maven.project.MavenProject;
25 import org.apache.maven.scm.manager.NoSuchScmProviderException;
26 import org.apache.maven.scm.repository.ScmRepositoryException;
27 import org.apache.maven.shared.release.ReleaseExecutionException;
28 import org.apache.maven.shared.release.ReleaseFailureException;
29 import org.apache.maven.shared.release.ReleaseResult;
30 import org.apache.maven.shared.release.config.ReleaseDescriptor;
31 import org.apache.maven.shared.release.env.ReleaseEnvironment;
32 import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
33 import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
34 import org.codehaus.plexus.util.StringUtils;
35
36 import static java.util.Objects.requireNonNull;
37
38
39
40
41
42
43 public abstract class AbstractCheckPomPhase extends AbstractReleasePhase {
44
45 private final ScmRepositoryConfigurator scmRepositoryConfigurator;
46
47
48
49
50 private final boolean scmRequired;
51
52
53
54
55 private final boolean snapshotsRequired;
56
57 public AbstractCheckPomPhase(
58 ScmRepositoryConfigurator scmRepositoryConfigurator, boolean scmRequired, boolean snapshotsRequired) {
59 this.scmRepositoryConfigurator = requireNonNull(scmRepositoryConfigurator);
60 this.scmRequired = scmRequired;
61 this.snapshotsRequired = snapshotsRequired;
62 }
63
64 @Override
65 public ReleaseResult execute(
66 ReleaseDescriptor releaseDescriptor,
67 ReleaseEnvironment releaseEnvironment,
68 List<MavenProject> reactorProjects)
69 throws ReleaseExecutionException, ReleaseFailureException {
70 ReleaseResult result = new ReleaseResult();
71
72
73 if (scmRequired) {
74 if (StringUtils.isEmpty(releaseDescriptor.getScmSourceUrl())) {
75 throw new ReleaseFailureException(
76 "Missing required setting: scm connection or developerConnection must be specified.");
77 }
78
79 try {
80 scmRepositoryConfigurator.getConfiguredRepository(releaseDescriptor, releaseEnvironment.getSettings());
81 } catch (ScmRepositoryException e) {
82 throw new ReleaseScmRepositoryException(e.getMessage(), e.getValidationMessages());
83 } catch (NoSuchScmProviderException e) {
84 throw new ReleaseFailureException(
85 "The provider given in the SCM URL could not be found: " + e.getMessage());
86 }
87 }
88
89 boolean containsSnapshotProjects = false;
90
91 for (MavenProject project : reactorProjects) {
92 if (ArtifactUtils.isSnapshot(project.getVersion())) {
93 containsSnapshotProjects = true;
94
95 break;
96 }
97 }
98
99 if (snapshotsRequired && !containsSnapshotProjects && !releaseDescriptor.isBranchCreation()) {
100 throw new ReleaseFailureException("You don't have a SNAPSHOT project in the reactor projects list.");
101 }
102
103 result.setResultCode(ReleaseResult.SUCCESS);
104
105 return result;
106 }
107
108 @Override
109 public ReleaseResult simulate(
110 ReleaseDescriptor releaseDescriptor,
111 ReleaseEnvironment releaseEnvironment,
112 List<MavenProject> reactorProjects)
113 throws ReleaseExecutionException, ReleaseFailureException {
114
115 return execute(releaseDescriptor, releaseEnvironment, reactorProjects);
116 }
117 }