Skip to content

Instantly share code, notes, and snippets.

@jvanzyl
Created August 18, 2011 19:35
Show Gist options
  • Save jvanzyl/1154957 to your computer and use it in GitHub Desktop.
Save jvanzyl/1154957 to your computer and use it in GitHub Desktop.
package com.sonatype.provisio.internal;
import java.io.File;
import java.util.Properties;
import org.apache.maven.repository.internal.DefaultServiceLocator;
import org.apache.maven.repository.internal.MavenRepositorySystemSession;
import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Settings;
import org.apache.maven.settings.building.DefaultSettingsBuilderFactory;
import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
import org.apache.maven.settings.building.SettingsBuilder;
import org.apache.maven.settings.building.SettingsBuildingException;
import org.apache.maven.settings.building.SettingsBuildingRequest;
import org.sonatype.aether.RepositorySystem;
import org.sonatype.aether.RepositorySystemSession;
import org.sonatype.aether.connector.async.AsyncRepositoryConnectorFactory;
import org.sonatype.aether.repository.Authentication;
import org.sonatype.aether.repository.LocalRepository;
import org.sonatype.aether.repository.Proxy;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.spi.connector.RepositoryConnectorFactory;
public class AetherSetup {
//
// Aether resolver setup
//
public RepositorySystem getRepositorySystem() {
DefaultServiceLocator serviceLocator = new DefaultServiceLocator();
serviceLocator.addService(RepositoryConnectorFactory.class, AsyncRepositoryConnectorFactory.class);
return serviceLocator.getService(RepositorySystem.class);
}
public RepositorySystemSession getRepositorySystemSession(RepositorySystem repositorySystem) {
final MavenRepositorySystemSession repoSession = new MavenRepositorySystemSession();
repoSession.setLocalRepositoryManager(repositorySystem.newLocalRepositoryManager(new LocalRepository(getLocalRepository(new Properties()))));
repoSession.setTransferListener(new AetherTransferListener());
return repoSession;
}
public String getLocalRepository(Properties properties) {
String localRepository = properties.getProperty("repo.local");
if (localRepository == null || localRepository.length() <= 0) {
Settings settings = readMavenSettings();
localRepository = settings.getLocalRepository();
if (localRepository == null || localRepository.length() <= 0) {
localRepository = new File(System.getProperty("user.home"), ".m2/repository").getAbsolutePath();
}
}
return localRepository;
}
public RemoteRepository getRemoteRepository(Properties properties) {
String user = System.getProperty("user.name");
String repoUrl = properties.getProperty("repo.url", "http://repo1.maven.org/maven2/");
String repoUser = properties.getProperty("repo.username", user);
String repoPass = properties.getProperty("repo.password");
//
// Proxy
//
String proxyHost = properties.getProperty("proxy.host", "");
String proxyPort = properties.getProperty("proxy.port", "80");
String proxyUser = properties.getProperty("proxy.username", user);
String proxyPass = properties.getProperty("proxy.password");
String repositoryId = "proviso";
Settings settings = readMavenSettings();
//
// If there is a mirrorOf in the settings settings
if (settings.getMirrors() != null && settings.getMirrors().size() == 1) {
Mirror mirror = settings.getMirrors().get(0);
repoUrl = mirror.getUrl();
repositoryId = mirror.getId();
//
// account for having no username or password
//
if (settings.getServer(repositoryId) != null) {
repoUser = settings.getServer(repositoryId).getUsername();
repoPass = settings.getServer(repositoryId).getPassword();
}
}
final RemoteRepository remoteRepository = new RemoteRepository(repositoryId, "default", repoUrl);
remoteRepository.setAuthentication(new Authentication(repoUser, repoPass));
if (proxyHost.length() > 0) {
int port;
try {
port = Integer.parseInt(proxyPort);
} catch (NumberFormatException e) {
throw new RuntimeException("Invalid proxy port " + proxyPort + ": " + e.getMessage(), e);
}
remoteRepository.setProxy(new Proxy(Proxy.TYPE_HTTP, proxyHost, port, new Authentication(proxyUser, proxyPass)));
}
return remoteRepository;
}
public Settings readMavenSettings() {
SettingsBuilder settingsBuilder = new DefaultSettingsBuilderFactory().newInstance();
SettingsBuildingRequest request = new DefaultSettingsBuildingRequest();
request.setSystemProperties(System.getProperties());
request.setUserSettingsFile(new File(System.getProperty("user.home"), ".m2/settings.xml"));
Settings settings;
try {
settings = settingsBuilder.build(request).getEffectiveSettings();
} catch (SettingsBuildingException e) {
settings = new Settings();
}
return settings;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment