Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aether-users] Missing Transport Connector for HTTP Repositories

Timo Rohrberg wrote:

public static RepositorySystem newRepositorySystem()
{
   DefaultServiceLocator locator =
MavenRepositorySystemUtils.newServiceLocator();
   locator.addService(RepositoryConnectorFactory.class,
BasicRepositoryConnectorFactory.class);
   locator.addService(TransporterFactory.class,
FileTransporterFactory.class);
   locator.addService(TransporterFactory.class,
HttpTransporterFactory.class);

   return locator.getService(RepositorySystem.class);
}

public static DefaultRepositorySystemSession
newRepositorySystemSession(RepositorySystem system)
{
   DefaultRepositorySystemSession session =
MavenRepositorySystemUtils.newSession();

   LocalRepository localRepo = new LocalRepository("target/local-repo");

session.setLocalRepositoryManager(system.newLocalRepositoryManager(session,
localRepo));

   session.setTransferListener(new ConsoleTransferListener());
   session.setRepositoryListener(new ConsoleRepositoryListener());

   return session;
}

That code looks like it was taken from the example project, so generally works.

private boolean existArtifactInRepository(final Artifact artifact, final
RemoteRepository repository)
{
   ArtifactRequest request = new ArtifactRequest();
   request.setArtifact(artifact);
   request.setRepositories(Collections.singletonList(repository));

request.addRepository(repository) might be less typing.

And uploading artifacts works if I use
the injected repository system and session. However, in my use case I
cannot use the same repository system and session for checking the
existence since I am in a reactor build

From this I take it you're coding a Maven plugin. A Maven plugin that creates its own repo system and session is pretty much doomed to misbehave, e.g. ignore Maven's network/proxy configuration.

Maven's reactor output is provided to Aether via a WorkspaceReader configured on the repo session. So for your case, you should have tried the following, using the injected repo system and session:

DefaultRepositorySystemSession mySession = new DefaultRepositorySystemSession(injectedSession):
mySession.setWorkspaceReader(null); // disable reactor resolution
mySession.setLocalRepositoryManager(...); // as before, bypass previous build output via temp local repo
injectedSystem.resolveArtifact(mySession, ...);


Benjamin



Back to the top