You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2024/11/14 13:26:07 UTC
(maven-resolver) branch master updated: [MRESOLVER-627] Improve transport selection and logging (#599)
This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
The following commit(s) were added to refs/heads/master by this push:
new 5b03ce5e [MRESOLVER-627] Improve transport selection and logging (#599)
5b03ce5e is described below
commit 5b03ce5efd1fa7947ef9bfdffb740ce9d49da2a3
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Thu Nov 14 14:26:02 2024 +0100
[MRESOLVER-627] Improve transport selection and logging (#599)
In previous releases transport selection was really secretive and broken, as it considered invalid configuration as "protocol not supported" and Resolver did not log anything or worse, silently skipped to new transport.
Changes:
* transport provider: was logging ONLY if transport selection failed (no transport was selected), changed to continuously log (in DEBUG) why a transport was ignored and next selection performed. Also, in case of total failure, exceptions are added now as suppressed ones instead just lost.
* multiple transporter factories: smaller fixes for earlier protocol detection (file is exception to support cases like JIMFS), and when client creation is attempted but it fails due runtime exception, fail the whole process (like bad enum in JDK transport config).
* before all transporter "blanket" threw NoTransporterEx and Basic connector was "protecting" caller from it, hence to continue doing so, no basic connector "blankets" all runtime and non-runtime exceptions coming from transport to "early report" problem as it happens in basic connector ctor.
---
https://issues.apache.org/jira/browse/MRESOLVER-627
---
.../connector/basic/BasicRepositoryConnector.java | 6 ++-
.../impl/DefaultLocalRepositoryProvider.java | 14 ++---
.../impl/DefaultRepositoryConnectorProvider.java | 35 +++---------
.../impl/DefaultRepositoryLayoutProvider.java | 15 +++---
.../internal/impl/DefaultTransporterProvider.java | 36 ++++++++++---
.../connector/transport/TransporterFactory.java | 1 +
.../aether/transport/apache/ApacheTransporter.java | 3 --
.../transport/apache/ApacheTransporterFactory.java | 4 ++
.../transport/classpath/ClasspathTransporter.java | 4 --
.../classpath/ClasspathTransporterFactory.java | 4 ++
.../transport/file/FileTransporterFactory.java | 4 ++
.../aether/transport/jdk/JdkTransporter.java | 62 ++++++++++++----------
.../transport/jdk/JdkTransporterFactory.java | 2 +-
.../aether/transport/jetty/JettyTransporter.java | 62 +++++++++++++---------
.../aether/transport/minio/MinioTransporter.java | 15 +++---
.../transport/minio/MinioTransporterFactory.java | 8 ++-
.../aether/transport/minio/MinioTransporterIT.java | 2 +
17 files changed, 157 insertions(+), 120 deletions(-)
diff --git a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
index 87dd89c1..bcc880ad 100644
--- a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
+++ b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
@@ -58,7 +58,6 @@ import org.eclipse.aether.spi.io.ChecksumProcessor;
import org.eclipse.aether.transfer.ChecksumFailureException;
import org.eclipse.aether.transfer.NoRepositoryConnectorException;
import org.eclipse.aether.transfer.NoRepositoryLayoutException;
-import org.eclipse.aether.transfer.NoTransporterException;
import org.eclipse.aether.transfer.TransferEvent;
import org.eclipse.aether.transfer.TransferResource;
import org.eclipse.aether.util.ConfigUtils;
@@ -130,7 +129,10 @@ final class BasicRepositoryConnector implements RepositoryConnector {
}
try {
transporter = transporterProvider.newTransporter(session, repository);
- } catch (NoTransporterException e) {
+ } catch (RuntimeException e) {
+ throw new NoRepositoryConnectorException(
+ repository, "Transporter configuration issue: " + e.getMessage(), e);
+ } catch (Exception e) {
throw new NoRepositoryConnectorException(repository, e.getMessage(), e);
}
this.checksumPolicyProvider = checksumPolicyProvider;
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalRepositoryProvider.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalRepositoryProvider.java
index 3556cab9..ab448d46 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalRepositoryProvider.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalRepositoryProvider.java
@@ -83,12 +83,8 @@ public class DefaultLocalRepositoryProvider implements LocalRepositoryProvider {
return manager;
} catch (NoLocalRepositoryManagerException e) {
// continue and try next factory
- errors.add(e);
- }
- }
- if (LOGGER.isDebugEnabled() && errors.size() > 1) {
- for (Exception e : errors) {
LOGGER.debug("Could not obtain local repository manager for {}", repository, e);
+ errors.add(e);
}
}
@@ -102,7 +98,13 @@ public class DefaultLocalRepositoryProvider implements LocalRepositoryProvider {
factories.list(buffer);
}
- throw new NoLocalRepositoryManagerException(
+ // create exception: if one error, make it cause
+ NoLocalRepositoryManagerException ex = new NoLocalRepositoryManagerException(
repository, buffer.toString(), errors.size() == 1 ? errors.get(0) : null);
+ // if more errors, make them all suppressed
+ if (errors.size() > 1) {
+ errors.forEach(ex::addSuppressed);
+ }
+ throw ex;
}
}
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryConnectorProvider.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryConnectorProvider.java
index 859d06cb..b2bc0ace 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryConnectorProvider.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryConnectorProvider.java
@@ -31,8 +31,6 @@ import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.impl.RemoteRepositoryFilterManager;
import org.eclipse.aether.impl.RepositoryConnectorProvider;
import org.eclipse.aether.internal.impl.filter.FilteringRepositoryConnector;
-import org.eclipse.aether.repository.Authentication;
-import org.eclipse.aether.repository.Proxy;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.spi.connector.RepositoryConnector;
import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
@@ -93,25 +91,6 @@ public class DefaultRepositoryConnectorProvider implements RepositoryConnectorPr
Utils.appendClassLoader(buffer, connector);
buffer.append(" with priority ").append(factory.getPriority());
buffer.append(" for ").append(repository.getUrl());
-
- Authentication auth = repository.getAuthentication();
- if (auth != null) {
- buffer.append(" with ").append(auth);
- }
-
- Proxy proxy = repository.getProxy();
- if (proxy != null) {
- buffer.append(" via ")
- .append(proxy.getHost())
- .append(':')
- .append(proxy.getPort());
-
- auth = proxy.getAuthentication();
- if (auth != null) {
- buffer.append(" with ").append(auth);
- }
- }
-
LOGGER.debug(buffer.toString());
}
@@ -122,12 +101,8 @@ public class DefaultRepositoryConnectorProvider implements RepositoryConnectorPr
}
} catch (NoRepositoryConnectorException e) {
// continue and try next factory
- errors.add(e);
- }
- }
- if (LOGGER.isDebugEnabled() && errors.size() > 1) {
- for (Exception e : errors) {
LOGGER.debug("Could not obtain connector factory for {}", repository, e);
+ errors.add(e);
}
}
@@ -141,7 +116,13 @@ public class DefaultRepositoryConnectorProvider implements RepositoryConnectorPr
factories.list(buffer);
}
- throw new NoRepositoryConnectorException(
+ // create exception: if one error, make it cause
+ NoRepositoryConnectorException ex = new NoRepositoryConnectorException(
repository, buffer.toString(), errors.size() == 1 ? errors.get(0) : null);
+ // if more errors, make them all suppressed
+ if (errors.size() > 1) {
+ errors.forEach(ex::addSuppressed);
+ }
+ throw ex;
}
}
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryLayoutProvider.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryLayoutProvider.java
index 35483084..b457dc3b 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryLayoutProvider.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryLayoutProvider.java
@@ -68,12 +68,8 @@ public final class DefaultRepositoryLayoutProvider implements RepositoryLayoutPr
return factory.getComponent().newInstance(session, repository);
} catch (NoRepositoryLayoutException e) {
// continue and try next factory
- errors.add(e);
- }
- }
- if (LOGGER.isDebugEnabled() && errors.size() > 1) {
- for (Exception e : errors) {
LOGGER.debug("Could not obtain layout factory for {}", repository, e);
+ errors.add(e);
}
}
@@ -87,6 +83,13 @@ public final class DefaultRepositoryLayoutProvider implements RepositoryLayoutPr
factories.list(buffer);
}
- throw new NoRepositoryLayoutException(repository, buffer.toString(), errors.size() == 1 ? errors.get(0) : null);
+ // create exception: if one error, make it cause
+ NoRepositoryLayoutException ex = new NoRepositoryLayoutException(
+ repository, buffer.toString(), errors.size() == 1 ? errors.get(0) : null);
+ // if more errors, make them all suppressed
+ if (errors.size() > 1) {
+ errors.forEach(ex::addSuppressed);
+ }
+ throw ex;
}
}
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTransporterProvider.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTransporterProvider.java
index b494a1bf..615cfad7 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTransporterProvider.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTransporterProvider.java
@@ -28,6 +28,8 @@ import java.util.List;
import java.util.Map;
import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.Authentication;
+import org.eclipse.aether.repository.Proxy;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.spi.connector.transport.Transporter;
import org.eclipse.aether.spi.connector.transport.TransporterFactory;
@@ -74,18 +76,33 @@ public final class DefaultTransporterProvider implements TransporterProvider {
Utils.appendClassLoader(buffer, transporter);
buffer.append(" with priority ").append(factory.getPriority());
buffer.append(" for ").append(repository.getUrl());
+
+ Authentication auth = repository.getAuthentication();
+ if (auth != null) {
+ buffer.append(" with ").append(auth);
+ }
+
+ Proxy proxy = repository.getProxy();
+ if (proxy != null) {
+ buffer.append(" via ")
+ .append(proxy.getHost())
+ .append(':')
+ .append(proxy.getPort());
+
+ auth = proxy.getAuthentication();
+ if (auth != null) {
+ buffer.append(" with ").append(auth);
+ }
+ }
+
LOGGER.debug(buffer.toString());
}
return transporter;
} catch (NoTransporterException e) {
// continue and try next factory
- errors.add(e);
- }
- }
- if (LOGGER.isDebugEnabled() && errors.size() > 1) {
- for (Exception e : errors) {
LOGGER.debug("Could not obtain transporter factory for {}", repository, e);
+ errors.add(e);
}
}
@@ -98,6 +115,13 @@ public final class DefaultTransporterProvider implements TransporterProvider {
factories.list(buffer);
}
- throw new NoTransporterException(repository, buffer.toString(), errors.size() == 1 ? errors.get(0) : null);
+ // create exception: if one error, make it cause
+ NoTransporterException ex =
+ new NoTransporterException(repository, buffer.toString(), errors.size() == 1 ? errors.get(0) : null);
+ // if more errors, make them all suppressed
+ if (errors.size() > 1) {
+ errors.forEach(ex::addSuppressed);
+ }
+ throw ex;
}
}
diff --git a/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/transport/TransporterFactory.java b/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/transport/TransporterFactory.java
index ca87a0c8..49886e4b 100644
--- a/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/transport/TransporterFactory.java
+++ b/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/transport/TransporterFactory.java
@@ -40,6 +40,7 @@ public interface TransporterFactory {
* @param repository The remote repository to create a transporter for, must not be {@code null}.
* @return The transporter for the given repository, never {@code null}.
* @throws NoTransporterException If the factory cannot create a transporter for the specified remote repository.
+ * @throws RuntimeException If the factory could create a transporter for the specified remote repository but fails so (ie invalid configuration).
*/
Transporter newInstance(RepositorySystemSession session, RemoteRepository repository) throws NoTransporterException;
diff --git a/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/ApacheTransporter.java b/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/ApacheTransporter.java
index 36ac4a5c..425b6862 100644
--- a/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/ApacheTransporter.java
+++ b/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/ApacheTransporter.java
@@ -157,9 +157,6 @@ final class ApacheTransporter extends AbstractTransporter implements HttpTranspo
ChecksumExtractor checksumExtractor,
PathProcessor pathProcessor)
throws NoTransporterException {
- if (!"http".equalsIgnoreCase(repository.getProtocol()) && !"https".equalsIgnoreCase(repository.getProtocol())) {
- throw new NoTransporterException(repository);
- }
this.checksumExtractor = checksumExtractor;
this.pathProcessor = pathProcessor;
try {
diff --git a/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/ApacheTransporterFactory.java b/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/ApacheTransporterFactory.java
index 14c076f4..3a3424a1 100644
--- a/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/ApacheTransporterFactory.java
+++ b/maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/ApacheTransporterFactory.java
@@ -73,6 +73,10 @@ public final class ApacheTransporterFactory implements HttpTransporterFactory {
requireNonNull(session, "session cannot be null");
requireNonNull(repository, "repository cannot be null");
+ if (!"http".equalsIgnoreCase(repository.getProtocol()) && !"https".equalsIgnoreCase(repository.getProtocol())) {
+ throw new NoTransporterException(repository);
+ }
+
return new ApacheTransporter(repository, session, checksumExtractor, pathProcessor);
}
}
diff --git a/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporter.java b/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporter.java
index b5caf093..a021addf 100644
--- a/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporter.java
+++ b/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporter.java
@@ -43,10 +43,6 @@ final class ClasspathTransporter extends AbstractTransporter {
private final ClassLoader classLoader;
ClasspathTransporter(RepositorySystemSession session, RemoteRepository repository) throws NoTransporterException {
- if (!"classpath".equalsIgnoreCase(repository.getProtocol())) {
- throw new NoTransporterException(repository);
- }
-
String base;
try {
URI uri = new URI(repository.getUrl());
diff --git a/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporterFactory.java b/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporterFactory.java
index a293ce71..646dadbe 100644
--- a/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporterFactory.java
+++ b/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporterFactory.java
@@ -75,6 +75,10 @@ public final class ClasspathTransporterFactory implements TransporterFactory {
requireNonNull(session, "session cannot be null");
requireNonNull(repository, "repository cannot be null");
+ if (!"classpath".equalsIgnoreCase(repository.getProtocol())) {
+ throw new NoTransporterException(repository);
+ }
+
return new ClasspathTransporter(session, repository);
}
}
diff --git a/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporterFactory.java b/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporterFactory.java
index 313be701..a836194b 100644
--- a/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporterFactory.java
+++ b/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporterFactory.java
@@ -50,6 +50,7 @@ public final class FileTransporterFactory implements TransporterFactory {
// enables default constructor
}
+ @Override
public float getPriority() {
return priority;
}
@@ -65,11 +66,14 @@ public final class FileTransporterFactory implements TransporterFactory {
return this;
}
+ @Override
public Transporter newInstance(RepositorySystemSession session, RemoteRepository repository)
throws NoTransporterException {
requireNonNull(session, "session cannot be null");
requireNonNull(repository, "repository cannot be null");
+ // special case in file transport: to support custom FS providers (like JIMFS), we cannot
+ // cover "all possible protocols" to throw NoTransporterEx, but we rely on FS rejecting the URI
FileTransporter.FileOp fileOp = FileTransporter.FileOp.COPY;
String repositoryUrl = repository.getUrl();
if (repositoryUrl.startsWith("symlink+")) {
diff --git a/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java
index b3cbf8b4..63647865 100644
--- a/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java
+++ b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java
@@ -228,11 +228,7 @@ final class JdkTransporter extends AbstractTransporter implements HttpTransporte
CONFIG_PROP_MAX_CONCURRENT_REQUESTS));
this.headers = headers;
- try {
- this.client = createClient(session, repository, insecure);
- } catch (Exception e) {
- throw new NoTransporterException(repository, e);
- }
+ this.client = createClient(session, repository, insecure);
}
private URI resolve(TransportTask task) {
@@ -431,7 +427,7 @@ final class JdkTransporter extends AbstractTransporter implements HttpTransporte
}
private HttpClient createClient(RepositorySystemSession session, RemoteRepository repository, boolean insecure)
- throws Exception {
+ throws RuntimeException {
HashMap<Authenticator.RequestorType, PasswordAuthentication> authentications = new HashMap<>();
SSLContext sslContext = null;
@@ -449,35 +445,43 @@ final class JdkTransporter extends AbstractTransporter implements HttpTransporte
}
if (sslContext == null) {
- if (insecure) {
- sslContext = SSLContext.getInstance("TLS");
- X509ExtendedTrustManager tm = new X509ExtendedTrustManager() {
- @Override
- public void checkClientTrusted(X509Certificate[] chain, String authType) {}
+ try {
+ if (insecure) {
+ sslContext = SSLContext.getInstance("TLS");
+ X509ExtendedTrustManager tm = new X509ExtendedTrustManager() {
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType) {}
- @Override
- public void checkServerTrusted(X509Certificate[] chain, String authType) {}
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType) {}
- @Override
- public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) {}
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) {}
- @Override
- public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) {}
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) {}
- @Override
- public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) {}
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) {}
- @Override
- public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) {}
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) {}
- @Override
- public X509Certificate[] getAcceptedIssuers() {
- return null;
- }
- };
- sslContext.init(null, new X509TrustManager[] {tm}, null);
- } else {
- sslContext = SSLContext.getDefault();
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return null;
+ }
+ };
+ sslContext.init(null, new X509TrustManager[] {tm}, null);
+ } else {
+ sslContext = SSLContext.getDefault();
+ }
+ } catch (Exception e) {
+ if (e instanceof RuntimeException) {
+ throw (RuntimeException) e;
+ } else {
+ throw new IllegalStateException("SSL Context setup failure", e);
+ }
}
}
diff --git a/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
index a91044ec..bfc3c209 100644
--- a/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
+++ b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
@@ -69,7 +69,7 @@ public final class JdkTransporterFactory implements HttpTransporterFactory {
requireNonNull(repository, "repository cannot be null");
if (!"http".equalsIgnoreCase(repository.getProtocol()) && !"https".equalsIgnoreCase(repository.getProtocol())) {
- throw new NoTransporterException(repository, "Only HTTP/HTTPS is supported");
+ throw new NoTransporterException(repository);
}
return new JdkTransporter(session, repository, javaVersion(), checksumExtractor, pathProcessor);
diff --git a/maven-resolver-transport-jetty/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporter.java b/maven-resolver-transport-jetty/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporter.java
index 2935532b..c7c300a5 100644
--- a/maven-resolver-transport-jetty/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporter.java
+++ b/maven-resolver-transport-jetty/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporter.java
@@ -204,11 +204,7 @@ final class JettyTransporter extends AbstractTransporter implements HttpTranspor
this.basicServerAuthenticationResult = new AtomicReference<>(null);
this.basicProxyAuthenticationResult = new AtomicReference<>(null);
- try {
- this.client = createClient();
- } catch (Exception e) {
- throw new NoTransporterException(repository, e);
- }
+ this.client = createClient();
}
private void mayApplyPreemptiveAuth(Request request) {
@@ -419,7 +415,7 @@ final class JettyTransporter extends AbstractTransporter implements HttpTranspor
}
@SuppressWarnings("checkstyle:methodlength")
- private HttpClient createClient() throws Exception {
+ private HttpClient createClient() throws RuntimeException {
BasicAuthentication.BasicResult serverAuth = null;
BasicAuthentication.BasicResult proxyAuth = null;
SSLContext sslContext = null;
@@ -440,23 +436,31 @@ final class JettyTransporter extends AbstractTransporter implements HttpTranspor
}
if (sslContext == null) {
- if (insecure) {
- sslContext = SSLContext.getInstance("TLS");
- X509TrustManager tm = new X509TrustManager() {
- @Override
- public void checkClientTrusted(X509Certificate[] chain, String authType) {}
-
- @Override
- public void checkServerTrusted(X509Certificate[] chain, String authType) {}
-
- @Override
- public X509Certificate[] getAcceptedIssuers() {
- return new X509Certificate[0];
- }
- };
- sslContext.init(null, new X509TrustManager[] {tm}, null);
- } else {
- sslContext = SSLContext.getDefault();
+ try {
+ if (insecure) {
+ sslContext = SSLContext.getInstance("TLS");
+ X509TrustManager tm = new X509TrustManager() {
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType) {}
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType) {}
+
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[0];
+ }
+ };
+ sslContext.init(null, new X509TrustManager[] {tm}, null);
+ } else {
+ sslContext = SSLContext.getDefault();
+ }
+ } catch (Exception e) {
+ if (e instanceof RuntimeException) {
+ throw (RuntimeException) e;
+ } else {
+ throw new IllegalStateException("SSL Context setup failure", e);
+ }
}
}
@@ -528,7 +532,15 @@ final class JettyTransporter extends AbstractTransporter implements HttpTranspor
this.basicProxyAuthenticationResult.set(proxyAuth);
}
- httpClient.start();
- return httpClient;
+ try {
+ httpClient.start();
+ return httpClient;
+ } catch (Exception e) {
+ if (e instanceof RuntimeException) {
+ throw (RuntimeException) e;
+ } else {
+ throw new IllegalStateException("Jetty client start failure", e);
+ }
+ }
}
}
diff --git a/maven-resolver-transport-minio/src/main/java/org/eclipse/aether/transport/minio/MinioTransporter.java b/maven-resolver-transport-minio/src/main/java/org/eclipse/aether/transport/minio/MinioTransporter.java
index 6556774f..3299ec1e 100644
--- a/maven-resolver-transport-minio/src/main/java/org/eclipse/aether/transport/minio/MinioTransporter.java
+++ b/maven-resolver-transport-minio/src/main/java/org/eclipse/aether/transport/minio/MinioTransporter.java
@@ -111,18 +111,15 @@ final class MinioTransporter extends AbstractTransporter implements Transporter
}
}
if (username == null || password == null) {
- throw new NoTransporterException(repository, "No accessKey and/or secretKey provided");
+ throw new IllegalStateException(
+ "Minio transport: No accessKey and/or secretKey provided for repository " + repository.getId());
}
Provider credentialsProvider = new StaticProvider(username, password, null);
- try {
- this.client = MinioClient.builder()
- .endpoint(repository.getUrl())
- .credentialsProvider(credentialsProvider)
- .build();
- } catch (Exception e) {
- throw new NoTransporterException(repository, e);
- }
+ this.client = MinioClient.builder()
+ .endpoint(repository.getUrl())
+ .credentialsProvider(credentialsProvider)
+ .build();
this.objectNameMapper = objectNameMapperFactory.create(session, repository, client, headers);
}
diff --git a/maven-resolver-transport-minio/src/main/java/org/eclipse/aether/transport/minio/MinioTransporterFactory.java b/maven-resolver-transport-minio/src/main/java/org/eclipse/aether/transport/minio/MinioTransporterFactory.java
index b8d9338e..c5240f53 100644
--- a/maven-resolver-transport-minio/src/main/java/org/eclipse/aether/transport/minio/MinioTransporterFactory.java
+++ b/maven-resolver-transport-minio/src/main/java/org/eclipse/aether/transport/minio/MinioTransporterFactory.java
@@ -82,15 +82,19 @@ public final class MinioTransporterFactory implements TransporterFactory {
.setUrl(repository.getUrl().substring("s3+".length()))
.build();
} else if (priority == DEFAULT_PRIORITY) {
- throw new NoTransporterException(repository);
+ throw new NoTransporterException(
+ repository,
+ "To use Minio transport with plain HTTP/HTTPS repositories, increase the Minio transport priority");
}
String objectNameMapperConf = ConfigUtils.getString(
session,
MinioTransporterConfigurationKeys.DEFAULT_OBJECT_NAME_MAPPER,
+ MinioTransporterConfigurationKeys.CONFIG_PROP_OBJECT_NAME_MAPPER + "." + repository.getId(),
MinioTransporterConfigurationKeys.CONFIG_PROP_OBJECT_NAME_MAPPER);
ObjectNameMapperFactory objectNameMapperFactory = objectNameMapperFactories.get(objectNameMapperConf);
if (objectNameMapperFactory == null) {
- throw new NoTransporterException(repository, "Unknown object name mapper: " + objectNameMapperConf);
+ throw new IllegalArgumentException("Unknown object name mapper configured '" + objectNameMapperConf
+ + "' for repository " + repository.getId());
}
return new MinioTransporter(session, adjusted, objectNameMapperFactory);
}
diff --git a/maven-resolver-transport-minio/src/test/java/org/eclipse/aether/transport/minio/MinioTransporterIT.java b/maven-resolver-transport-minio/src/test/java/org/eclipse/aether/transport/minio/MinioTransporterIT.java
index 1b4344f6..6af72ce2 100644
--- a/maven-resolver-transport-minio/src/test/java/org/eclipse/aether/transport/minio/MinioTransporterIT.java
+++ b/maven-resolver-transport-minio/src/test/java/org/eclipse/aether/transport/minio/MinioTransporterIT.java
@@ -125,6 +125,8 @@ class MinioTransporterIT {
new MinioTransporter(session, newRepo(RepositoryAuth.WITHOUT), objectNameMapperFactory);
fail("Should throw");
} catch (NoTransporterException e) {
+ fail("Should not throw this");
+ } catch (IllegalStateException e) {
assertTrue(e.getMessage().contains("No accessKey and/or secretKey provided"));
}
}