Add the possibility to omit explicitly specifying a version in annotationProcessorPaths

Resolve the version of the annotation processor path (specified in annotationProcessorPaths) in kapt plugin if it is already specified in dependencies of this module or parent module. Plugin management is also supported.

#KT-59521 In Fixed

Merge-request: KT-MR-10761
Merged-by: Aleksei Cherepanov <aleksei.cherepanov@jetbrains.com>
This commit is contained in:
Aleksei.Cherepanov
2023-06-22 17:13:24 +00:00
committed by Space Team
parent e4d1e6246e
commit a3583ea79b
7 changed files with 223 additions and 1 deletions
@@ -25,6 +25,7 @@ import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Dependency;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.compiler.DependencyCoordinate;
import org.apache.maven.project.MavenProject;
@@ -167,7 +168,7 @@ public class AnnotationProcessingManager {
return new DefaultArtifact(
dependency.getGroupId(),
dependency.getArtifactId(),
VersionRange.createFromVersionSpec(dependency.getVersion()),
VersionRange.createFromVersionSpec(evaluateVersion(dependency)),
Artifact.SCOPE_RUNTIME,
dependency.getType(),
dependency.getClassifier(),
@@ -175,6 +176,21 @@ public class AnnotationProcessingManager {
false);
}
private String evaluateVersion(@NotNull DependencyCoordinate dependency) {
String version = dependency.getVersion();
if (version == null) {
Optional<Dependency> sameButParentDependency = project.getDependencies().stream()
.filter(dep -> dep.getGroupId().equals(dependency.getGroupId())
&& dep.getArtifactId().equals(dependency.getArtifactId())
&& dep.getVersion() != null
).findFirst();
if (sameButParentDependency.isPresent()) {
version = sameButParentDependency.get().getVersion();
}
}
return version;
}
@NotNull
private static String getMavenPluginVersion() throws MojoExecutionException {
ClassLoader classLoader = AnnotationProcessingManager.class.getClassLoader();