Explicitly apply mirror and auth settings to remote repos in the CLI
Previously, the CLI relied on Aether using the session's mirror selector and authentication selector to customize the configured repositories. These selectors are only used to configure what Aether calls recessive repositories (repositories discovered when resolving an artifact), rather than the explicitly configured repositories that are typically used. This commit updates AetherGrapeEngine to apply mirror and authentication configuration to every added repository, bringing its behaviour for these two settings into line with what it already does for proxy configuration. Fixes #1354
This commit is contained in:
parent
8e84151f8f
commit
5f9fddd44a
|
|
@ -263,12 +263,41 @@ public class AetherGrapeEngine implements GrapeEngine {
|
|||
if (this.repositories.contains(repository)) {
|
||||
return;
|
||||
}
|
||||
|
||||
repository = getPossibleMirror(repository);
|
||||
repository = applyProxy(repository);
|
||||
repository = applyAuthentication(repository);
|
||||
|
||||
this.repositories.add(0, repository);
|
||||
}
|
||||
|
||||
private RemoteRepository getPossibleMirror(RemoteRepository remoteRepository) {
|
||||
RemoteRepository mirror = this.session.getMirrorSelector().getMirror(
|
||||
remoteRepository);
|
||||
if (mirror != null) {
|
||||
return mirror;
|
||||
}
|
||||
|
||||
return remoteRepository;
|
||||
}
|
||||
|
||||
private RemoteRepository applyProxy(RemoteRepository repository) {
|
||||
if (repository.getProxy() == null) {
|
||||
RemoteRepository.Builder builder = new RemoteRepository.Builder(repository);
|
||||
builder.setProxy(this.session.getProxySelector().getProxy(repository));
|
||||
repository = builder.build();
|
||||
}
|
||||
this.repositories.add(0, repository);
|
||||
return repository;
|
||||
}
|
||||
|
||||
private RemoteRepository applyAuthentication(RemoteRepository repository) {
|
||||
if (repository.getAuthentication() == null) {
|
||||
RemoteRepository.Builder builder = new RemoteRepository.Builder(repository);
|
||||
builder.setAuthentication(this.session.getAuthenticationSelector()
|
||||
.getAuthentication(repository));
|
||||
repository = builder.build();
|
||||
}
|
||||
return repository;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -58,12 +58,10 @@ import org.springframework.boot.cli.util.Log;
|
|||
public class SettingsXmlRepositorySystemSessionAutoConfiguration implements
|
||||
RepositorySystemSessionAutoConfiguration {
|
||||
|
||||
private static final String DEFAULT_HOME_DIR = System.getProperty("user.home");
|
||||
|
||||
private final String homeDir;
|
||||
|
||||
public SettingsXmlRepositorySystemSessionAutoConfiguration() {
|
||||
this(DEFAULT_HOME_DIR);
|
||||
this(System.getProperty("user.home"));
|
||||
}
|
||||
|
||||
SettingsXmlRepositorySystemSessionAutoConfiguration(String homeDir) {
|
||||
|
|
|
|||
|
|
@ -18,19 +18,23 @@ package org.springframework.boot.cli.compiler.grape;
|
|||
|
||||
import groovy.lang.GroovyClassLoader;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.aether.DefaultRepositorySystemSession;
|
||||
import org.eclipse.aether.util.repository.JreProxySelector;
|
||||
import org.eclipse.aether.repository.Authentication;
|
||||
import org.eclipse.aether.repository.RemoteRepository;
|
||||
import org.junit.Test;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
|
|
@ -42,10 +46,14 @@ public class AetherGrapeEngineTests {
|
|||
|
||||
private final GroovyClassLoader groovyClassLoader = new GroovyClassLoader();
|
||||
|
||||
private final AetherGrapeEngine grapeEngine = AetherGrapeEngineFactory.create(
|
||||
this.groovyClassLoader, Arrays.asList(new RepositoryConfiguration("central",
|
||||
URI.create("http://repo1.maven.org/maven2"), false)),
|
||||
new DependencyResolutionContext());
|
||||
private final AetherGrapeEngine grapeEngine = createGrapeEngine();
|
||||
|
||||
private AetherGrapeEngine createGrapeEngine() {
|
||||
return AetherGrapeEngineFactory.create(this.groovyClassLoader, Arrays
|
||||
.asList(new RepositoryConfiguration("central", URI
|
||||
.create("http://repo1.maven.org/maven2"), false)),
|
||||
new DependencyResolutionContext());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void dependencyResolution() {
|
||||
|
|
@ -59,10 +67,53 @@ public class AetherGrapeEngineTests {
|
|||
|
||||
@Test
|
||||
public void proxySelector() {
|
||||
DefaultRepositorySystemSession session = (DefaultRepositorySystemSession) ReflectionTestUtils
|
||||
.getField(this.grapeEngine, "session");
|
||||
assertTrue((session.getProxySelector() instanceof CompositeProxySelector)
|
||||
|| (session.getProxySelector() instanceof JreProxySelector));
|
||||
doWithCustomUserHome(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
AetherGrapeEngine grapeEngine = createGrapeEngine();
|
||||
|
||||
DefaultRepositorySystemSession session = (DefaultRepositorySystemSession) ReflectionTestUtils
|
||||
.getField(grapeEngine, "session");
|
||||
|
||||
assertTrue(session.getProxySelector() instanceof CompositeProxySelector);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void repositoryMirrors() {
|
||||
doWithCustomUserHome(new Runnable() {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void run() {
|
||||
AetherGrapeEngine grapeEngine = createGrapeEngine();
|
||||
|
||||
List<RemoteRepository> repositories = (List<RemoteRepository>) ReflectionTestUtils
|
||||
.getField(grapeEngine, "repositories");
|
||||
assertEquals(1, repositories.size());
|
||||
assertEquals("central-mirror", repositories.get(0).getId());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void repositoryAuthentication() {
|
||||
doWithCustomUserHome(new Runnable() {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void run() {
|
||||
AetherGrapeEngine grapeEngine = createGrapeEngine();
|
||||
|
||||
List<RemoteRepository> repositories = (List<RemoteRepository>) ReflectionTestUtils
|
||||
.getField(grapeEngine, "repositories");
|
||||
assertEquals(1, repositories.size());
|
||||
Authentication authentication = repositories.get(0).getAuthentication();
|
||||
assertNotNull(authentication);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
|
@ -190,4 +241,26 @@ public class AetherGrapeEngineTests {
|
|||
exclusion.put("module", module);
|
||||
return exclusion;
|
||||
}
|
||||
|
||||
private void doWithCustomUserHome(Runnable action) {
|
||||
doWithSystemProperty("user.home",
|
||||
new File("src/test/resources").getAbsolutePath(), action);
|
||||
}
|
||||
|
||||
private void doWithSystemProperty(String key, String value, Runnable action) {
|
||||
String previousValue = setOrClearSystemProperty(key, value);
|
||||
try {
|
||||
action.run();
|
||||
}
|
||||
finally {
|
||||
setOrClearSystemProperty(key, previousValue);
|
||||
}
|
||||
}
|
||||
|
||||
private String setOrClearSystemProperty(String key, String value) {
|
||||
if (value != null) {
|
||||
return System.setProperty(key, value);
|
||||
}
|
||||
return System.clearProperty(key);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue