Skip to content

Commit c69f513

Browse files
[MENFORCER-458] Move Build-in rules to new API
Moved rules: - bannedDependencies - banTransitiveDependencies - dependencyConvergence - requireReleaseDeps - requireUpperBoundDeps
1 parent 8653ab2 commit c69f513

File tree

35 files changed

+760
-883
lines changed

35 files changed

+760
-883
lines changed

enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java renamed to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/BanTransitiveDependencies.java

+25-13
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,23 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19-
package org.apache.maven.plugins.enforcer;
19+
package org.apache.maven.enforcer.rules.dependency;
20+
21+
import javax.inject.Inject;
22+
import javax.inject.Named;
2023

2124
import java.util.List;
25+
import java.util.Objects;
2226
import java.util.Set;
2327
import java.util.stream.Collectors;
2428

2529
import org.apache.commons.lang3.StringUtils;
2630
import org.apache.maven.RepositoryUtils;
27-
import org.apache.maven.enforcer.rule.api.EnforcerRule;
2831
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
29-
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
32+
import org.apache.maven.enforcer.rules.AbstractStandardEnforcerRule;
3033
import org.apache.maven.enforcer.rules.utils.ArtifactMatcher;
3134
import org.apache.maven.enforcer.rules.utils.ArtifactUtils;
3235
import org.apache.maven.execution.MavenSession;
33-
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
3436
import org.eclipse.aether.artifact.ArtifactTypeRegistry;
3537
import org.eclipse.aether.graph.Dependency;
3638
import org.eclipse.aether.graph.DependencyNode;
@@ -43,7 +45,8 @@
4345
*
4446
* @author Jakub Senko
4547
*/
46-
public class BanTransitiveDependencies extends AbstractNonCacheableEnforcerRule implements EnforcerRule {
48+
@Named("banTransitiveDependencies")
49+
public final class BanTransitiveDependencies extends AbstractStandardEnforcerRule {
4750

4851
/**
4952
* Specify the dependencies that will be ignored. This can be a list of artifacts in the format
@@ -63,6 +66,16 @@ public class BanTransitiveDependencies extends AbstractNonCacheableEnforcerRule
6366
*/
6467
private List<String> includes;
6568

69+
private final MavenSession session;
70+
71+
private final ResolveUtil resolveUtil;
72+
73+
@Inject
74+
public BanTransitiveDependencies(MavenSession session, ResolveUtil resolveUtil) {
75+
this.session = Objects.requireNonNull(session);
76+
this.resolveUtil = Objects.requireNonNull(resolveUtil);
77+
}
78+
6679
/**
6780
* Searches dependency tree recursively for transitive dependencies that are not excluded, while generating nice
6881
* info message along the way.
@@ -126,24 +139,23 @@ private static boolean searchTree(
126139
}
127140

128141
@Override
129-
public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {
130-
MavenSession session;
131-
try {
132-
session = (MavenSession) helper.evaluate("${session}");
133-
} catch (ExpressionEvaluationException e) {
134-
throw new RuntimeException(e);
135-
}
142+
public void execute() throws EnforcerRuleException {
136143
ArtifactTypeRegistry artifactTypeRegistry =
137144
session.getRepositorySession().getArtifactTypeRegistry();
138145
ArtifactMatcher exclusions = new ArtifactMatcher(excludes, includes);
139146
Set<Dependency> directDependencies = session.getCurrentProject().getDependencies().stream()
140147
.map(d -> RepositoryUtils.toDependency(d, artifactTypeRegistry))
141148
.collect(Collectors.toSet());
142149

143-
DependencyNode rootNode = ArtifactUtils.resolveTransitiveDependencies(helper);
150+
DependencyNode rootNode = resolveUtil.resolveTransitiveDependencies();
144151
StringBuilder generatedMessage = new StringBuilder();
145152
if (searchTree(rootNode, 0, exclusions, directDependencies, generatedMessage)) {
146153
throw new EnforcerRuleException(ofNullable(getMessage()).orElse(generatedMessage.toString()));
147154
}
148155
}
156+
157+
@Override
158+
public String toString() {
159+
return String.format("BanTransitiveDependencies[message=%s, excludes=%s]", getMessage(), excludes);
160+
}
149161
}

enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedDependencies.java renamed to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/BannedDependencies.java

+22-4
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,43 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19-
package org.apache.maven.plugins.enforcer;
19+
package org.apache.maven.enforcer.rules.dependency;
20+
21+
import javax.inject.Inject;
22+
import javax.inject.Named;
2023

2124
import org.apache.maven.artifact.Artifact;
2225
import org.apache.maven.enforcer.rules.utils.ArtifactUtils;
26+
import org.apache.maven.execution.MavenSession;
2327

2428
/**
2529
* This rule checks that lists of dependencies are not included.
2630
*
2731
* @author <a href="mailto:[email protected]">Brian Fox</a>
2832
*/
29-
public class BannedDependencies extends BannedDependenciesBase {
33+
@Named("bannedDependencies")
34+
public final class BannedDependencies extends BannedDependenciesBase {
35+
36+
@Inject
37+
BannedDependencies(MavenSession session, ResolveUtil resolveUtil) {
38+
super(session, resolveUtil);
39+
}
40+
3041
@Override
3142
protected boolean validate(Artifact artifact) {
32-
return !ArtifactUtils.matchDependencyArtifact(artifact, excludes)
33-
|| ArtifactUtils.matchDependencyArtifact(artifact, includes);
43+
return !ArtifactUtils.matchDependencyArtifact(artifact, getExcludes())
44+
|| ArtifactUtils.matchDependencyArtifact(artifact, getIncludes());
3445
}
3546

3647
@Override
3748
protected String getErrorMessage() {
3849
return "banned via the exclude/include list";
3950
}
51+
52+
@Override
53+
public String toString() {
54+
return String.format(
55+
"BannedDependencies[message=%s, excludes=%s, includes=%s, searchTransitive=%b]",
56+
getMessage(), getExcludes(), getIncludes(), isSearchTransitive());
57+
}
4058
}

enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BannedDependenciesBase.java renamed to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/BannedDependenciesBase.java

+36-25
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,25 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19-
package org.apache.maven.plugins.enforcer;
19+
package org.apache.maven.enforcer.rules.dependency;
2020

2121
import java.util.List;
22+
import java.util.Objects;
2223

2324
import org.apache.commons.lang3.StringUtils;
2425
import org.apache.maven.artifact.Artifact;
2526
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
26-
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
27+
import org.apache.maven.enforcer.rules.AbstractStandardEnforcerRule;
2728
import org.apache.maven.enforcer.rules.utils.ArtifactUtils;
2829
import org.apache.maven.execution.MavenSession;
29-
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
3030
import org.eclipse.aether.graph.DependencyNode;
3131

3232
/**
3333
* Abstract base class for rules which validate the transitive
3434
* dependency tree by traversing all children and validating every
3535
* dependency artifact.
3636
*/
37-
abstract class BannedDependenciesBase extends AbstractNonCacheableEnforcerRule {
37+
abstract class BannedDependenciesBase extends AbstractStandardEnforcerRule {
3838

3939
/**
4040
* Specify the banned dependencies. This can be a list of artifacts in the format
@@ -46,7 +46,7 @@ abstract class BannedDependenciesBase extends AbstractNonCacheableEnforcerRule {
4646
* @see #setExcludes(List)
4747
* @see #getExcludes()
4848
*/
49-
protected List<String> excludes = null;
49+
private List<String> excludes = null;
5050

5151
/**
5252
* Specify the allowed dependencies. This can be a list of artifacts in the format
@@ -60,39 +60,55 @@ abstract class BannedDependenciesBase extends AbstractNonCacheableEnforcerRule {
6060
* @see #setIncludes(List)
6161
* @see #getIncludes()
6262
*/
63-
protected List<String> includes = null;
63+
private List<String> includes = null;
6464

6565
/** Specify if transitive dependencies should be searched (default) or only look at direct dependencies. */
6666
private boolean searchTransitive = true;
6767

68+
private final MavenSession session;
69+
70+
private final ResolveUtil resolveUtil;
71+
72+
BannedDependenciesBase(MavenSession session, ResolveUtil resolveUtil) {
73+
this.session = Objects.requireNonNull(session);
74+
this.resolveUtil = Objects.requireNonNull(resolveUtil);
75+
}
76+
77+
protected MavenSession getSession() {
78+
return session;
79+
}
80+
6881
@Override
69-
public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {
70-
MavenSession session;
71-
try {
72-
session = (MavenSession) helper.evaluate("${session}");
73-
} catch (ExpressionEvaluationException e) {
74-
throw new EnforcerRuleException("Cannot resolve MavenSession", e);
75-
}
82+
public void execute() throws EnforcerRuleException {
7683

7784
if (!searchTransitive) {
7885
String result = session.getCurrentProject().getDependencyArtifacts().stream()
7986
.filter(a -> !validate(a))
8087
.collect(
8188
StringBuilder::new,
8289
(messageBuilder, node) -> messageBuilder
90+
.append(System.lineSeparator())
8391
.append(node.getId())
8492
.append(" <--- ")
8593
.append(getErrorMessage()),
8694
(m1, m2) -> m1.append(m2.toString()))
8795
.toString();
8896
if (!result.isEmpty()) {
89-
throw new EnforcerRuleException(result);
97+
String message = "";
98+
if (getMessage() != null) {
99+
message = getMessage() + System.lineSeparator();
100+
}
101+
throw new EnforcerRuleException(message + result);
90102
}
91103
} else {
92104
StringBuilder messageBuilder = new StringBuilder();
93-
DependencyNode rootNode = ArtifactUtils.resolveTransitiveDependencies(helper);
105+
DependencyNode rootNode = resolveUtil.resolveTransitiveDependencies();
94106
if (!validate(rootNode, 0, messageBuilder)) {
95-
throw new EnforcerRuleException(messageBuilder.toString());
107+
String message = "";
108+
if (getMessage() != null) {
109+
message = getMessage() + System.lineSeparator();
110+
}
111+
throw new EnforcerRuleException(message + messageBuilder);
96112
}
97113
}
98114
}
@@ -127,15 +143,6 @@ protected boolean validate(DependencyNode node, int level, StringBuilder message
127143
*/
128144
protected abstract boolean validate(Artifact dependency);
129145

130-
/**
131-
* Checks if is search transitive.
132-
*
133-
* @return the searchTransitive
134-
*/
135-
public boolean isSearchTransitive() {
136-
return this.searchTransitive;
137-
}
138-
139146
/**
140147
* Sets the search transitive.
141148
*
@@ -193,4 +200,8 @@ public List<String> getIncludes() {
193200
public void setIncludes(List<String> theIncludes) {
194201
this.includes = theIncludes;
195202
}
203+
204+
public boolean isSearchTransitive() {
205+
return searchTransitive;
206+
}
196207
}

0 commit comments

Comments
 (0)