Skip to content

Commit

Permalink
Use Aether to download JUnit platform launcher
Browse files Browse the repository at this point in the history
This commit updates our maven plugin to use aether directly, rather than
the now deprecated maven features.

Closes gh-36724
  • Loading branch information
snicoll committed Aug 14, 2023
1 parent 9805723 commit 3ae65e0
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ public abstract class AbstractAotMojo extends AbstractDependencyFilterMojo {
@Parameter(property = "spring-boot.aot.compilerArguments")
private String compilerArguments;

protected final MavenSession getSession() {
return this.session;
}

@Override
public void execute() throws MojoExecutionException, MojoFailureException {
if (this.skip) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,26 @@
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.artifact.handler.DefaultArtifactHandler;
import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.apache.maven.repository.RepositorySystem;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.collection.CollectRequest;
import org.eclipse.aether.resolution.ArtifactResult;
import org.eclipse.aether.resolution.DependencyRequest;
import org.eclipse.aether.resolution.DependencyResult;
import org.eclipse.aether.util.artifact.JavaScopes;
import org.eclipse.aether.util.filter.DependencyFilterUtils;

/**
* Invoke the AOT engine on tests.
Expand Down Expand Up @@ -97,20 +103,6 @@ public class ProcessTestAotMojo extends AbstractAotMojo {
@Parameter(defaultValue = "${project.build.directory}/spring-aot/main/classes", required = true)
private File generatedClasses;

/**
* Local artifact repository used to resolve JUnit platform launcher jars.
*/
@SuppressWarnings("deprecation")
@Parameter(defaultValue = "${localRepository}", required = true, readonly = true)
private org.apache.maven.artifact.repository.ArtifactRepository localRepository;

/**
* Remote artifact repositories used to resolve JUnit platform launcher jars.
*/
@SuppressWarnings("deprecation")
@Parameter(defaultValue = "${project.remoteArtifactRepositories}", required = true, readonly = true)
private List<org.apache.maven.artifact.repository.ArtifactRepository> remoteRepositories;

@Component
private RepositorySystem repositorySystem;

Expand Down Expand Up @@ -165,10 +157,10 @@ private URL[] addJUnitPlatformLauncher(URL[] classPath) throws Exception {
String version = getJUnitPlatformVersion();
DefaultArtifactHandler handler = new DefaultArtifactHandler("jar");
handler.setIncludesDependencies(true);
ArtifactResolutionResult resolutionResult = resolveArtifact(new DefaultArtifact(JUNIT_PLATFORM_GROUP_ID,
Set<Artifact> artifacts = resolveArtifact(new DefaultArtifact(JUNIT_PLATFORM_GROUP_ID,
JUNIT_PLATFORM_LAUNCHER_ARTIFACT_ID, version, null, "jar", null, handler));
Set<URL> fullClassPath = new LinkedHashSet<>(Arrays.asList(classPath));
for (Artifact artifact : resolutionResult.getArtifacts()) {
for (Artifact artifact : artifacts) {
fullClassPath.add(artifact.getFile().toURI().toURL());
}
return fullClassPath.toArray(URL[]::new);
Expand All @@ -185,16 +177,20 @@ private String getJUnitPlatformVersion() throws MojoExecutionException {
return version;
}

private ArtifactResolutionResult resolveArtifact(Artifact artifact) throws Exception {
ArtifactResolutionRequest request = new ArtifactResolutionRequest();
request.setArtifact(artifact);
request.setLocalRepository(this.localRepository);
request.setResolveTransitively(true);
request.setCollectionFilter(new RuntimeArtifactFilter());
request.setRemoteRepositories(this.remoteRepositories);
ArtifactResolutionResult result = this.repositorySystem.resolve(request);
this.resolutionErrorHandler.throwErrors(request, result);
return result;
private Set<Artifact> resolveArtifact(Artifact artifact) throws Exception {
CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot(RepositoryUtils.toDependency(artifact, null));
collectRequest.setRepositories(this.project.getRemotePluginRepositories());
DependencyRequest request = new DependencyRequest();
request.setCollectRequest(collectRequest);
request.setFilter(DependencyFilterUtils.classpathFilter(JavaScopes.RUNTIME));
DependencyResult dependencyResult = this.repositorySystem
.resolveDependencies(getSession().getRepositorySession(), request);
return dependencyResult.getArtifactResults()
.stream()
.map(ArtifactResult::getArtifact)
.map(RepositoryUtils::toArtifact)
.collect(Collectors.toSet());
}

}

0 comments on commit 3ae65e0

Please sign in to comment.