Reputation: 29
I have a class in my maven project that is used to resolve artifacts during a mojo execution. However I need to write tests for this ArtifactResolver class that tests it on a real repo which is let's say maven's central repo.
This is my class:
public class ArtifactResolver {
private final RepositorySystem repositorySystem;
private final RepositorySystemSession repositorySystemSession;
private final List<RemoteRepository> remoteRepositoryList;
public ArtifactResolver(RepositorySystem repositorySystem,
RepositorySystemSession repositorySystemSession,
List<RemoteRepository> remoteRepositoryList) {
this.repositorySystem = repositorySystem;
this.repositorySystemSession = repositorySystemSession;
this.remoteRepositoryList = remoteRepositoryList;
}
public ArtifactResult resolve(Artifact artifact) throws ArtifactResolutionException {
ArtifactRequest artifactRequest = new ArtifactRequest();
artifactRequest.setArtifact(artifact);
artifactRequest.setRepositories(remoteRepositoryList);
return repositorySystem.resolveArtifact(repositorySystemSession, artifactRequest);
}
}
I just want to create mock instances of repositorySystemSession and remoteRepositoryList that will be able to resolve a real dependency like log4j for example.
Adding the remote repositories works manually, however I am finding mocking instances of repositorySystemSession and remoteRepositoryList hard. What I tried is creating them using the following:
package murex.subsystems.dependencies.services;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.repository.RemoteRepository;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.io.File;
import java.util.Collections;
import java.util.List;
public class ArtifactResolverTest {
private ArtifactResolver artifactResolver;
@BeforeEach
public void beforeEach(@TempDir File tempDir) {
RepositorySystem repositorySystem = MavenRepositorySystemUtils.newServiceLocator().getService(RepositorySystem.class);
RepositorySystemSession repositorySystemSession = MavenRepositorySystemUtils.newSession();
RemoteRepository remoteRepository = new RemoteRepository.Builder("central", "default", "https://repo.maven.apache.org/maven2/").build();
List<RemoteRepository> remoteRepositoryList = Collections.singletonList(remoteRepository);
artifactResolver = new ArtifactResolver(null, repositorySystem, repositorySystemSession, remoteRepositoryList);
}
@Test
void testResolve() throws ArtifactResolutionException {
artifactResolver.resolve(new DefaultArtifact("log4j:log4j:1.2.17"));
}
}
But I am facing the following error:
java.lang.NullPointerException: repository system session's local repository manager cannot be null
So can anyone assist me with that?
Upvotes: 1
Views: 81