Created
August 18, 2011 19:35
-
-
Save jvanzyl/1154957 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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