Use custom protocol/transport for Gradle Artifact Repo

Is there a way to specify a wagon (or something else) for remote maven repository in order to download artifact using a custom protocol (I already know how to upload/publish artifact using maven wagon , here I would like to download them using same protocol).

Something like:

dependencies {
 wagonJars "my-maven-wagon:1.0.0"
}
  repositories {
 maven {
  configuration = configurations.wagonJars
    name 'My Snapshot Repo'
  credentials {
   username userName
   password password
  }
  url 'myscheme://host/snapshot/'
 }
}

I’d expect it to work, provided the wagon is implemented correctly.

Well I might be wrong but I don’t see what’s going on…

Here is my conf:

repositories {
    mavenLocal()
}
  configurations {
    wagonJars
}
  dependencies {
    wagonJars "net.anzix.aws:s3-maven-wagon:3.3.4"
}
  repositories {
    maven {
        configuration = configurations.wagonJars
          name 'S3 Snapshot'
        credentials {
            username s3UserName
            password s3Password
        }
        url 's3://s3-repo/snapshot/'
    }
}

And here is the error:

> Unable to load Maven meta-data from s3://s3-repo/snapshot/com/exa/system/13.1-SNAPSHOT/maven-metadata.xml.
17:53:52.199 [ERROR] [org.gradle.BuildExceptionReporter]
     > Scheme 's3' not registered.
17:53:52.200 [ERROR] [org.gradle.BuildExceptionReporter]
  ...
7:53:52.231 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: java.lang.IllegalStateException: Scheme 's3' not registered.
17:53:52.231 [ERROR] [org.gradle.BuildExceptionReporter]
at org.apache.http.conn.scheme.SchemeRegistry.getScheme(SchemeRegistry.java:71)
17:53:52.231 [ERROR] [org.gradle.BuildExceptionReporter]
at org.apache.http.impl.conn.ProxySelectorRoutePlanner.determineRoute(ProxySelectorRoutePlanner.java:146)
17:53:52.231 [ERROR] [org.gradle.BuildExceptionReporter]
at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:788)
17:53:52.231 [ERROR] [org.gradle.BuildExceptionReporter]
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:414)
17:53:52.231 [ERROR] [org.gradle.BuildExceptionReporter]
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
17:53:52.231 [ERROR] [org.gradle.BuildExceptionReporter]
at org.apache.http.impl.client.DecompressingHttpClient.execute(DecompressingHttpClient.java:137)
17:53:52.232 [ERROR] [org.gradle.BuildExceptionReporter]
at org.apache.http.impl.client.DecompressingHttpClient.execute(DecompressingHttpClient.java:118)
17:53:52.232 [ERROR] [org.gradle.BuildExceptionReporter]
at org.gradle.api.internal.externalresource.transport.http.HttpClientHelper.performHttpRequest(HttpClientHelper.java:111)
17:53:52.232 [ERROR] [org.gradle.BuildExceptionReporter]
at org.gradle.api.internal.externalresource.transport.http.HttpClientHelper.executeGetOrHead(HttpClientHelper.java:87)
17:53:52.232 [ERROR] [org.gradle.BuildExceptionReporter]
at org.gradle.api.internal.externalresource.transport.http.HttpClientHelper.performRequest(HttpClientHelper.java:78)
17:53:52.232 [ERROR] [org.gradle.BuildExceptionReporter]
at org.gradle.api.internal.externalresource.transport.http.HttpClientHelper.performRawGet(HttpClientHelper.java:66)
17:53:52.232 [ERROR] [org.gradle.BuildExceptionReporter]
at org.gradle.api.internal.externalresource.transport.http.HttpClientHelper.performGet(HttpClientHelper.java:70)
17:53:52.232 [ERROR] [org.gradle.BuildExceptionReporter]
at org.gradle.api.internal.externalresource.transport.http.HttpResourceAccessor.getResource(HttpResourceAccessor.java:46)
17:53:52.232 [ERROR] [org.gradle.BuildExceptionReporter]
at org.gradle.api.internal.externalresource.transport.http.HttpResourceAccessor.getResource(HttpResourceAccessor.java:32)
17:53:52.233 [ERROR] [org.gradle.BuildExceptionReporter]
at org.gradle.api.internal.externalresource.transport.DefaultExternalResourceRepository.getResource(DefaultExternalResourceRepository.java:61)
17:53:52.233 [ERROR] [org.gradle.BuildExceptionReporter]
at org.gradle.api.internal.artifacts.repositories.resolver.MavenMetadataLoader.parseMavenMetadataInfo(MavenMetadataLoader.java:56)
17:53:52.233 [ERROR] [org.gradle.BuildExceptionReporter]
at org.gradle.api.internal.artifacts.repositories.resolver.MavenMetadataLoader.load(MavenMetadataLoader.java:46)
17:53:52.233 [ERROR] [org.gradle.BuildExceptionReporter]
... 119 more

You need to declare a repository for uploading, not downloading. See Interacting with Maven repositories in the Gradle User Guide.

Sorry, I thought you were trying to upload using a custom wagon. I don’t think you can specify a wagon for downloading.

Too bad :frowning:

From the gradle source, it seems that it is not supported… I can figure out why, but I was wondering if there is a workaround such as implementing a specific scheme for http client.

I could also update gradle in order to support custom transport…

Unfortunately, I’m not aware of a workaround. Maybe registering an URL schema would work, but I can’t tell.

Was anyone able to figure out how to use s3-based maven repositories in gradle? Thanks