1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.enforcer.rules;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23
24 import java.util.List;
25 import java.util.Objects;
26
27 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
28 import org.apache.maven.artifact.versioning.VersionRange;
29 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
30 import org.apache.maven.model.Prerequisites;
31 import org.apache.maven.project.MavenProject;
32
33
34
35
36
37 @Named("requirePrerequisite")
38 public final class RequirePrerequisite extends AbstractStandardEnforcerRule {
39
40
41
42
43
44 private List<String> packagings;
45
46
47
48
49 private String mavenVersion;
50
51 private final MavenProject project;
52
53 @Inject
54 public RequirePrerequisite(MavenProject project) {
55 this.project = Objects.requireNonNull(project);
56 }
57
58
59
60
61
62
63 public void setMavenVersion(String mavenVersion) {
64 this.mavenVersion = mavenVersion;
65 }
66
67
68
69
70
71
72
73 public void setPackagings(List<String> packagings) {
74 this.packagings = packagings;
75 }
76
77 @Override
78 public void execute() throws EnforcerRuleException {
79 try {
80
81 if ("pom".equals(project.getPackaging())) {
82 getLog().debug("Packaging is pom, skipping requirePrerequisite rule");
83 return;
84 }
85
86 if (packagings != null && !packagings.contains(project.getPackaging())) {
87 getLog().debug("Packaging is " + project.getPackaging() + ", skipping requirePrerequisite rule");
88 return;
89 }
90
91 Prerequisites prerequisites = project.getPrerequisites();
92
93 if (prerequisites == null) {
94 throw new EnforcerRuleException("Requires prerequisite not set");
95 }
96
97 if (mavenVersion != null) {
98
99 VersionRange requiredVersionRange = VersionRange.createFromVersionSpec(mavenVersion);
100
101 if (!requiredVersionRange.hasRestrictions()) {
102 requiredVersionRange = VersionRange.createFromVersionSpec("[" + mavenVersion + ",)");
103 }
104
105 VersionRange specifiedVersion = VersionRange.createFromVersionSpec(prerequisites.getMaven());
106
107 VersionRange restrictedVersionRange = requiredVersionRange.restrict(specifiedVersion);
108
109 if (restrictedVersionRange.getRecommendedVersion() == null) {
110 throw new EnforcerRuleException("The specified Maven prerequisite( " + specifiedVersion
111 + " ) doesn't match the required version: " + mavenVersion);
112 }
113 }
114 } catch (InvalidVersionSpecificationException e) {
115 throw new EnforcerRuleException(e.getMessage(), e);
116 }
117 }
118
119 @Override
120 public String toString() {
121 return String.format("RequirePrerequisite[packagings=%s, mavenVersion=%s]", packagings, mavenVersion);
122 }
123 }