followup: honor jre global proxy settings (IDEA-181489)

This commit is contained in:
Eugene Zhuravlev
2017-11-27 15:48:00 +01:00
parent 229c8a0711
commit 593e36761e
2 changed files with 19 additions and 9 deletions

View File

@@ -51,17 +51,15 @@ import java.util.*;
*/
public class ArtifactRepositoryManager {
private static final VersionScheme ourVersioning = new GenericVersionScheme();
private static final JreProxySelector ourProxySelector = new JreProxySelector();
private final DefaultRepositorySystemSession mySession;
public static final RemoteRepository MAVEN_CENTRAL_REPOSITORY = createRemoteRepository(
private static final RemoteRepository MAVEN_CENTRAL_REPOSITORY = createRemoteRepository(
"central", "http://repo1.maven.org/maven2/"
);
public static final RemoteRepository JBOSS_COMMUNITY_REPOSITORY = createRemoteRepository(
private static final RemoteRepository JBOSS_COMMUNITY_REPOSITORY = createRemoteRepository(
"jboss.community", "https://repository.jboss.org/nexus/content/repositories/public/"
);
public static final List<RemoteRepository> PREDEFINED_REMOTE_REPOSITORIES = Collections.unmodifiableList(Arrays.asList(
MAVEN_CENTRAL_REPOSITORY, JBOSS_COMMUNITY_REPOSITORY
));
private static final RepositorySystem ourSystem;
static {
@@ -86,7 +84,8 @@ public class ArtifactRepositoryManager {
}
public ArtifactRepositoryManager(@NotNull File localRepositoryPath, @NotNull final ProgressConsumer progressConsumer) {
this(localRepositoryPath, PREDEFINED_REMOTE_REPOSITORIES, progressConsumer);
// recreate remote repository objects to ensure the latest proxy settings are used
this(localRepositoryPath, Arrays.asList(createRemoteRepository(MAVEN_CENTRAL_REPOSITORY), createRemoteRepository(JBOSS_COMMUNITY_REPOSITORY)), progressConsumer);
}
public ArtifactRepositoryManager(@NotNull File localRepositoryPath, List<RemoteRepository> remoteRepositories, @NotNull final ProgressConsumer progressConsumer) {
@@ -115,7 +114,7 @@ public class ArtifactRepositoryManager {
// setup session here
session.setLocalRepositoryManager(ourSystem.newLocalRepositoryManager(session, new LocalRepository(localRepositoryPath)));
session.setProxySelector(new org.jetbrains.idea.maven.aether.JreProxySelector());
session.setProxySelector(ourProxySelector);
session.setReadOnly();
mySession = session;
}
@@ -202,7 +201,12 @@ public class ArtifactRepositoryManager {
public static RemoteRepository createRemoteRepository(final String id, final String url) {
// for maven repos repository type should be 'default'
return new RemoteRepository.Builder(id, "default", url).build();
return new RemoteRepository.Builder(id, "default", url).setProxy(ourProxySelector.getProxy(url)).build();
}
public static RemoteRepository createRemoteRepository(RemoteRepository prototype) {
final String url = prototype.getUrl();
return new RemoteRepository.Builder(prototype.getId(), prototype.getContentType(), url).setProxy(ourProxySelector.getProxy(url)).build();
}
private CollectRequest createCollectRequest(String groupId, String artifactId, Collection<VersionConstraint> versions, final Set<ArtifactKind> kinds) {

View File

@@ -4,6 +4,7 @@ package org.jetbrains.idea.maven.aether;
import org.eclipse.aether.repository.*;
import org.eclipse.aether.repository.Proxy;
import org.eclipse.aether.repository.ProxySelector;
import org.jetbrains.annotations.Nullable;
import java.net.*;
import java.util.List;
@@ -19,12 +20,17 @@ final class JreProxySelector implements ProxySelector {
}
public Proxy getProxy(RemoteRepository repository) {
return getProxy(repository.getUrl());
}
@Nullable
public Proxy getProxy(final String url) {
try {
final java.net.ProxySelector systemSelector = java.net.ProxySelector.getDefault();
if (systemSelector == null) {
return null;
}
final URI uri = new URI(repository.getUrl()).parseServerAuthority();
final URI uri = new URI(url).parseServerAuthority();
final List<java.net.Proxy> selected = systemSelector.select(uri);
if (selected == null || selected.isEmpty()) {
return null;