Roll spring-boot-maven-settings into the CLI

This commit is contained in:
Andy Wilkinson
2014-01-14 10:06:45 +00:00
parent 719b47fad8
commit 895daacde9
7 changed files with 8 additions and 48 deletions

View File

@@ -0,0 +1,112 @@
package org.springframework.boot.cli.compiler.grape;
import java.io.File;
import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Proxy;
import org.apache.maven.settings.Server;
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.SettingsBuildingException;
import org.apache.maven.settings.building.SettingsBuildingRequest;
import org.apache.maven.settings.building.SettingsBuildingResult;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.repository.Authentication;
import org.eclipse.aether.repository.AuthenticationSelector;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.MirrorSelector;
import org.eclipse.aether.repository.ProxySelector;
import org.eclipse.aether.util.repository.AuthenticationBuilder;
import org.eclipse.aether.util.repository.ConservativeAuthenticationSelector;
import org.eclipse.aether.util.repository.DefaultAuthenticationSelector;
import org.eclipse.aether.util.repository.DefaultMirrorSelector;
import org.eclipse.aether.util.repository.DefaultProxySelector;
/**
* Auto-configuration for a RepositorySystemSession that uses Maven's settings.xml to
* determine the configuration settings
*
* @author Andy Wilkinson
*/
public class SettingsXmlRepositorySystemSessionAutoConfiguration implements
RepositorySystemSessionAutoConfiguration {
@Override
public void apply(DefaultRepositorySystemSession session,
RepositorySystem repositorySystem) {
Settings settings = loadSettings();
session.setOffline(settings.isOffline());
session.setMirrorSelector(createMirrorSelector(settings));
session.setAuthenticationSelector(createAuthenticationSelector(settings));
session.setProxySelector(createProxySelector(settings));
String localRepository = settings.getLocalRepository();
if (localRepository != null) {
session.setLocalRepositoryManager(repositorySystem.newLocalRepositoryManager(
session, new LocalRepository(localRepository)));
}
}
private Settings loadSettings() {
SettingsBuildingRequest request = new DefaultSettingsBuildingRequest();
File userSettingsFile = new File(System.getProperty("user.home"),
".m2/settings.xml");
request.setUserSettingsFile(userSettingsFile);
SettingsBuildingResult result;
try {
result = new DefaultSettingsBuilderFactory().newInstance().build(request);
}
catch (SettingsBuildingException e) {
throw new IllegalStateException("Failed to build settings from "
+ userSettingsFile, e);
}
return result.getEffectiveSettings();
}
private MirrorSelector createMirrorSelector(Settings settings) {
DefaultMirrorSelector mirrorSelector = new DefaultMirrorSelector();
for (Mirror mirror : settings.getMirrors()) {
mirrorSelector.add(mirror.getId(), mirror.getUrl(), mirror.getLayout(),
false, mirror.getMirrorOf(), mirror.getMirrorOfLayouts());
}
return mirrorSelector;
}
private AuthenticationSelector createAuthenticationSelector(Settings settings) {
DefaultAuthenticationSelector authenticationSelector = new DefaultAuthenticationSelector();
for (Server server : settings.getServers()) {
AuthenticationBuilder auth = new AuthenticationBuilder();
auth.addUsername(server.getUsername()).addPassword(server.getPassword());
auth.addPrivateKey(server.getPrivateKey(), server.getPassphrase());
authenticationSelector.add(server.getId(), auth.build());
}
return new ConservativeAuthenticationSelector(authenticationSelector);
}
private ProxySelector createProxySelector(Settings settings) {
DefaultProxySelector proxySelector = new DefaultProxySelector();
for (Proxy proxy : settings.getProxies()) {
Authentication authentication = new AuthenticationBuilder()
.addUsername(proxy.getUsername()).addPassword(proxy.getPassword())
.build();
proxySelector.add(
new org.eclipse.aether.repository.Proxy(proxy.getProtocol(), proxy
.getHost(), proxy.getPort(), authentication), proxy
.getNonProxyHosts());
}
return proxySelector;
}
}