Skip to content

Commit ecd15b0

Browse files
Use new Enforcer Api
1 parent 3a97c36 commit ecd15b0

File tree

6 files changed

+454
-354
lines changed

6 files changed

+454
-354
lines changed

versions-enforcer/pom.xml

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<description>Enforcer rules using Versions Maven Plugin</description>
1414

1515
<properties>
16+
<!-- used in documentations -->
1617
<maven-enforcer-plugin-version>${maven-enforcer-plugin.version}</maven-enforcer-plugin-version>
1718
</properties>
1819

versions-enforcer/src/main/java/org/apache/maven/plugins/enforcer/MaxDependencyUpdates.java versions-enforcer/src/main/java/org/codehaus/mojo/versions/enforcer/MaxDependencyUpdates.java

+57-70
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.apache.maven.plugins.enforcer;
1+
package org.codehaus.mojo.versions.enforcer;
22
/*
33
* Licensed to the Apache Software Foundation (ASF) under one
44
* or more contributor license agreements. See the NOTICE file
@@ -18,20 +18,21 @@
1818
* under the License.
1919
*/
2020

21+
import javax.inject.Inject;
22+
import javax.inject.Named;
23+
2124
import java.util.Arrays;
22-
import java.util.HashMap;
2325
import java.util.List;
26+
import java.util.Map;
2427
import java.util.Optional;
2528
import java.util.Set;
2629
import java.util.TreeSet;
2730
import java.util.stream.Collectors;
2831

2932
import org.apache.maven.artifact.versioning.ArtifactVersion;
30-
import org.apache.maven.enforcer.rule.api.EnforcerLevel;
31-
import org.apache.maven.enforcer.rule.api.EnforcerRule;
32-
import org.apache.maven.enforcer.rule.api.EnforcerRule2;
33+
import org.apache.maven.enforcer.rule.api.AbstractEnforcerRule;
34+
import org.apache.maven.enforcer.rule.api.EnforcerRuleError;
3335
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
34-
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
3536
import org.apache.maven.execution.MavenSession;
3637
import org.apache.maven.model.Dependency;
3738
import org.apache.maven.plugin.MojoExecution;
@@ -46,8 +47,6 @@
4647
import org.codehaus.mojo.versions.api.VersionsHelper;
4748
import org.codehaus.mojo.versions.model.RuleSet;
4849
import org.codehaus.mojo.versions.utils.DependencyComparator;
49-
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
50-
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
5150

5251
import static java.util.Collections.emptyList;
5352
import static java.util.Collections.singletonList;
@@ -62,7 +61,8 @@
6261
import static org.codehaus.mojo.versions.utils.MavenProjectUtils.extractDependenciesFromPlugins;
6362
import static org.codehaus.mojo.versions.utils.MavenProjectUtils.extractPluginDependenciesFromPluginsInPluginManagement;
6463

65-
public class MaxDependencyUpdates implements EnforcerRule2 {
64+
@Named("maxDependencyUpdates")
65+
public class MaxDependencyUpdates extends AbstractEnforcerRule {
6666
/**
6767
* Maximum allowed number of updates.
6868
*
@@ -232,7 +232,7 @@ public class MaxDependencyUpdates implements EnforcerRule2 {
232232
* version numbers. The URI could be either a Wagon URI or a classpath URI
233233
* (e.g. <code>classpath:///package/sub/package/rules.xml</code>).
234234
*
235-
* 2.14.0
235+
* @since 2.14.0
236236
*/
237237
private String rulesUri;
238238

@@ -254,81 +254,78 @@ public class MaxDependencyUpdates implements EnforcerRule2 {
254254
*/
255255
protected boolean allowSnapshots;
256256

257-
/**
258-
* Retrieves the maven project from metadata
259-
* @param ruleHelper EnforcerRuleHelper object
260-
* @return maven project
261-
*/
262-
private static MavenProject getMavenProject(EnforcerRuleHelper ruleHelper) {
263-
try {
264-
return (MavenProject) ruleHelper.evaluate("${project}");
265-
} catch (ExpressionEvaluationException e) {
266-
throw new RuntimeException("Cannot evaluate project metadata", e);
267-
}
257+
private final MavenProject project;
258+
259+
private final RepositorySystem repositorySystem;
260+
261+
private final org.eclipse.aether.RepositorySystem aetherRepositorySystem;
262+
263+
private final Map<String, Wagon> wagonMap;
264+
265+
private final MavenSession mavenSession;
266+
267+
private final MojoExecution mojoExecution;
268+
269+
@Inject
270+
public MaxDependencyUpdates(
271+
MavenProject project,
272+
RepositorySystem repositorySystem,
273+
org.eclipse.aether.RepositorySystem aetherRepositorySystem,
274+
Map<String, Wagon> wagonMap,
275+
MavenSession mavenSession,
276+
MojoExecution mojoExecution) {
277+
this.project = project;
278+
this.repositorySystem = repositorySystem;
279+
this.aetherRepositorySystem = aetherRepositorySystem;
280+
this.wagonMap = wagonMap;
281+
this.mavenSession = mavenSession;
282+
this.mojoExecution = mojoExecution;
268283
}
269284

270285
/**
271286
* Creates the VersionsHelper object
272-
* @param ruleHelper EnforcerRuleHelper object
273287
* @return VersionsHelper object
274288
*/
275-
@SuppressWarnings("unchecked")
276-
private static VersionsHelper createVersionsHelper(
277-
EnforcerRuleHelper ruleHelper, String serverId, String rulesUri, RuleSet ruleSet) {
289+
private VersionsHelper createVersionsHelper(String serverId, String rulesUri, RuleSet ruleSet)
290+
throws EnforcerRuleError {
278291
try {
279292
return new DefaultVersionsHelper.Builder()
280-
.withRepositorySystem(ruleHelper.getComponent(RepositorySystem.class))
281-
.withAetherRepositorySystem(ruleHelper.getComponent(org.eclipse.aether.RepositorySystem.class))
282-
.withWagonMap(ruleHelper.getComponentMap(Wagon.class.getName()).entrySet().stream()
283-
.filter(e -> e.getValue() instanceof Wagon)
284-
.collect(HashMap::new, (m, e) -> m.put(e.getKey(), (Wagon) e.getValue()), HashMap::putAll))
293+
.withRepositorySystem(repositorySystem)
294+
.withAetherRepositorySystem(aetherRepositorySystem)
295+
.withWagonMap(wagonMap)
285296
.withServerId(serverId)
286297
.withRulesUri(rulesUri)
287298
.withRuleSet(ruleSet)
288299
.withIgnoredVersions(null)
289-
.withLog(ruleHelper.getLog())
290-
.withMavenSession((MavenSession) ruleHelper.evaluate("${session}"))
291-
.withMojoExecution((MojoExecution) ruleHelper.evaluate("${mojoExecution}"))
300+
.withLog(new PluginLogWrapper(getLog()))
301+
.withMavenSession(mavenSession)
302+
.withMojoExecution(mojoExecution)
292303
.build();
293-
} catch (ExpressionEvaluationException e) {
294-
throw new RuntimeException("Cannot evaluate project metadata", e);
295-
} catch (ComponentLookupException | MojoExecutionException e) {
296-
throw new RuntimeException("Cannot resolve dependency", e);
304+
} catch (MojoExecutionException e) {
305+
throw new EnforcerRuleError("Cannot resolve dependency", e);
297306
}
298307
}
299308

300309
@Override
301-
public boolean isCacheable() {
302-
return false;
303-
}
304-
305-
@Override
306-
public boolean isResultValid(EnforcerRule enforcerRule) {
307-
return false;
308-
}
310+
public void execute() throws EnforcerRuleException {
309311

310-
@Override
311-
public String getCacheId() {
312-
return "Does not matter as not cacheable";
313-
}
312+
PluginLogWrapper pluginLog = new PluginLogWrapper(getLog());
314313

315-
@Override
316-
public void execute(EnforcerRuleHelper ruleHelper) throws EnforcerRuleException {
317314
VersionsHelper versionsHelper =
318-
createVersionsHelper(ruleHelper, serverId != null ? serverId : "serverId", rulesUri, ruleSet);
319-
MavenProject project = getMavenProject(ruleHelper);
315+
createVersionsHelper(serverId != null ? serverId : "serverId", rulesUri, ruleSet);
316+
320317
Set<Dependency> dependencies = new TreeSet<>(DependencyComparator.INSTANCE);
321318
if (processDependencyManagement) {
322319
try {
323320
dependencies.addAll(filterDependencies(
324321
extractDependenciesFromDependencyManagement(
325-
project, processDependencyManagementTransitive, ruleHelper.getLog()),
322+
project, processDependencyManagementTransitive, pluginLog),
326323
dependencyManagementIncludes,
327324
dependencyManagementExcludes,
328325
"Dependency Management",
329-
ruleHelper.getLog()));
326+
pluginLog));
330327
} catch (VersionRetrievalException e) {
331-
throw new EnforcerRuleException(e.getMessage());
328+
throw new EnforcerRuleError(e.getMessage());
332329
}
333330
}
334331
if (processPluginDependencies) {
@@ -337,23 +334,19 @@ public void execute(EnforcerRuleHelper ruleHelper) throws EnforcerRuleException
337334
pluginDependencyIncludes,
338335
pluginDependencyExcludes,
339336
"Plugin Dependencies",
340-
ruleHelper.getLog()));
337+
pluginLog));
341338
}
342339
if (processPluginDependenciesInPluginManagement) {
343340
dependencies.addAll(filterDependencies(
344341
extractPluginDependenciesFromPluginsInPluginManagement(project),
345342
pluginManagementDependencyIncludes,
346343
pluginManagementDependencyExcludes,
347344
"Plugin Management Dependencies",
348-
ruleHelper.getLog()));
345+
pluginLog));
349346
}
350347
if (processDependencies) {
351348
dependencies.addAll(filterDependencies(
352-
project.getDependencies(),
353-
dependencyIncludes,
354-
dependencyExcludes,
355-
"Dependencies",
356-
ruleHelper.getLog()));
349+
project.getDependencies(), dependencyIncludes, dependencyExcludes, "Dependencies", pluginLog));
357350
}
358351
try {
359352
Optional<Segment> ignoredSegment = ignoreSubIncrementalUpdates
@@ -379,13 +372,7 @@ public void execute(EnforcerRuleHelper ruleHelper) throws EnforcerRuleException
379372
.collect(Collectors.joining(", ")));
380373
}
381374
} catch (VersionRetrievalException e) {
382-
throw new RuntimeException(e.getMessage(), e);
375+
throw new EnforcerRuleError(e);
383376
}
384377
}
385-
386-
@Override
387-
public EnforcerLevel getLevel() {
388-
// all reported items should be treated as errors
389-
return EnforcerLevel.ERROR;
390-
}
391378
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package org.codehaus.mojo.versions.enforcer;
2+
3+
import java.io.ByteArrayOutputStream;
4+
import java.io.PrintStream;
5+
6+
import org.apache.maven.enforcer.rule.api.EnforcerLogger;
7+
import org.apache.maven.plugin.logging.Log;
8+
9+
/**
10+
* Wrapper used to pass {@link EnforcerLogger} as Maven plugin {@link Log}.
11+
*/
12+
class PluginLogWrapper implements Log {
13+
14+
private final EnforcerLogger logger;
15+
16+
PluginLogWrapper(EnforcerLogger logger) {
17+
this.logger = logger;
18+
}
19+
20+
@Override
21+
public boolean isDebugEnabled() {
22+
return logger.isDebugEnabled();
23+
}
24+
25+
@Override
26+
public void debug(CharSequence charSequence) {
27+
logger.debug(charSequence);
28+
}
29+
30+
@Override
31+
public void debug(CharSequence charSequence, Throwable throwable) {
32+
logger.debug(charSequence + throwableToString(throwable));
33+
}
34+
35+
@Override
36+
public void debug(Throwable throwable) {
37+
logger.debug(throwableToString(throwable));
38+
}
39+
40+
@Override
41+
public boolean isInfoEnabled() {
42+
return logger.isInfoEnabled();
43+
}
44+
45+
@Override
46+
public void info(CharSequence charSequence) {
47+
logger.info(charSequence);
48+
}
49+
50+
@Override
51+
public void info(CharSequence charSequence, Throwable throwable) {
52+
53+
logger.info(charSequence + throwableToString(throwable));
54+
}
55+
56+
@Override
57+
public void info(Throwable throwable) {
58+
logger.info(throwableToString(throwable));
59+
}
60+
61+
@Override
62+
public boolean isWarnEnabled() {
63+
return logger.isWarnEnabled();
64+
}
65+
66+
@Override
67+
public void warn(CharSequence charSequence) {
68+
logger.warn(charSequence);
69+
}
70+
71+
@Override
72+
public void warn(CharSequence charSequence, Throwable throwable) {
73+
logger.warn(charSequence + throwableToString(throwable));
74+
}
75+
76+
@Override
77+
public void warn(Throwable throwable) {
78+
logger.warn(throwableToString(throwable));
79+
}
80+
81+
@Override
82+
public boolean isErrorEnabled() {
83+
return logger.isErrorEnabled();
84+
}
85+
86+
@Override
87+
public void error(CharSequence charSequence) {
88+
logger.error(charSequence);
89+
}
90+
91+
@Override
92+
public void error(CharSequence charSequence, Throwable throwable) {
93+
logger.error(charSequence + throwableToString(throwable));
94+
}
95+
96+
@Override
97+
public void error(Throwable throwable) {
98+
logger.error(throwableToString(throwable));
99+
}
100+
101+
private String throwableToString(Throwable throwable) {
102+
if (throwable != null) {
103+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
104+
throwable.printStackTrace(new PrintStream(stream));
105+
return System.lineSeparator() + stream;
106+
}
107+
return "";
108+
}
109+
}

0 commit comments

Comments
 (0)