Skip to content

Commit

Permalink
Relocate Apache HttpClient to avoid dependency conflicts
Browse files Browse the repository at this point in the history
  • Loading branch information
michel-kraemer committed Oct 22, 2018
1 parent fab8f3c commit 199aed1
Show file tree
Hide file tree
Showing 13 changed files with 152 additions and 119 deletions.
23 changes: 23 additions & 0 deletions apache-httpclient-relocated/build.gradle
@@ -0,0 +1,23 @@
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.4'
}
}

apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'java'

repositories {
jcenter()
}

dependencies {
compile 'org.apache.httpcomponents:httpclient:4.5.3'
}

shadowJar {
relocate 'org.apache', 'de.undercouch.gradle.tasks.download.org.apache'
}
15 changes: 14 additions & 1 deletion build.gradle
Expand Up @@ -47,7 +47,7 @@ repositories {

dependencies {
compile gradleApi()
compile 'org.apache.httpcomponents:httpclient:4.5.3'
compile project(path: "apache-httpclient-relocated", configuration: "shadow")

testCompile 'junit:junit:4.12'
testCompile 'org.littleshoot:littleproxy:1.1.0-beta2'
Expand Down Expand Up @@ -78,6 +78,14 @@ test {
jar {
// include license into jar
from 'LICENSE.txt'

// include contents of "apache-httpclient-relocated" into jar
from configurations.compile.findAll { it =~ "apache-httpclient-relocated" }.collect {
zipTree(it).matching {
include "mozilla/**"
include "de/undercouch/**"
}
}
}

// package javadoc into a jar file
Expand All @@ -99,6 +107,11 @@ artifacts {
archives packageSources
}

// remove all dependencies from configuration-to-scope mapping
// this also removes them from the maven pom file
conf2ScopeMappings.mappings.remove(configurations.compile)
conf2ScopeMappings.mappings.remove(configurations.testCompile)

def configurePom(def pom) {
// ensure correct artifact ID
pom.artifactId = 'gradle-download-task'
Expand Down
1 change: 1 addition & 0 deletions settings.gradle
@@ -0,0 +1 @@
include "apache-httpclient-relocated"
Expand Up @@ -14,10 +14,10 @@

package de.undercouch.gradle.tasks.download;

import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.auth.AuthScheme;
import org.apache.http.auth.Credentials;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpRequestInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpResponseInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.auth.AuthScheme;
import de.undercouch.gradle.tasks.download.org.apache.http.auth.Credentials;
import org.gradle.api.DefaultTask;
import org.gradle.api.Task;
import org.gradle.api.specs.Spec;
Expand Down
Expand Up @@ -14,6 +14,41 @@

package de.undercouch.gradle.tasks.download;

import de.undercouch.gradle.tasks.download.internal.CachingHttpClientFactory;
import de.undercouch.gradle.tasks.download.internal.HttpClientFactory;
import de.undercouch.gradle.tasks.download.internal.ProgressLoggerWrapper;
import de.undercouch.gradle.tasks.download.org.apache.http.Header;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpEntity;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpHost;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpRequestInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpResponse;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpResponseInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpStatus;
import de.undercouch.gradle.tasks.download.org.apache.http.auth.AuthScheme;
import de.undercouch.gradle.tasks.download.org.apache.http.auth.AuthScope;
import de.undercouch.gradle.tasks.download.org.apache.http.auth.Credentials;
import de.undercouch.gradle.tasks.download.org.apache.http.auth.UsernamePasswordCredentials;
import de.undercouch.gradle.tasks.download.org.apache.http.client.AuthCache;
import de.undercouch.gradle.tasks.download.org.apache.http.client.ClientProtocolException;
import de.undercouch.gradle.tasks.download.org.apache.http.client.CredentialsProvider;
import de.undercouch.gradle.tasks.download.org.apache.http.client.config.CookieSpecs;
import de.undercouch.gradle.tasks.download.org.apache.http.client.config.RequestConfig;
import de.undercouch.gradle.tasks.download.org.apache.http.client.methods.CloseableHttpResponse;
import de.undercouch.gradle.tasks.download.org.apache.http.client.methods.HttpGet;
import de.undercouch.gradle.tasks.download.org.apache.http.client.protocol.HttpClientContext;
import de.undercouch.gradle.tasks.download.org.apache.http.client.utils.DateUtils;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.auth.BasicScheme;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.auth.DigestScheme;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.client.BasicAuthCache;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.client.BasicCredentialsProvider;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.client.CloseableHttpClient;
import groovy.json.JsonOutput;
import groovy.json.JsonSlurper;
import groovy.lang.Closure;
import org.gradle.api.JavaVersion;
import org.gradle.api.Project;
import org.gradle.util.GradleVersion;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
Expand All @@ -32,42 +67,6 @@
import java.util.List;
import java.util.Map;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.HttpStatus;
import org.apache.http.auth.AuthScheme;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.AuthCache;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.client.utils.DateUtils;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.auth.DigestScheme;
import org.apache.http.impl.client.BasicAuthCache;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.gradle.api.JavaVersion;
import org.gradle.api.Project;
import org.gradle.util.GradleVersion;

import de.undercouch.gradle.tasks.download.internal.CachingHttpClientFactory;
import de.undercouch.gradle.tasks.download.internal.HttpClientFactory;
import de.undercouch.gradle.tasks.download.internal.ProgressLoggerWrapper;
import groovy.json.JsonOutput;
import groovy.json.JsonSlurper;
import groovy.lang.Closure;

/**
* Downloads a file and displays progress
* @author Michel Kraemer
Expand Down
Expand Up @@ -14,15 +14,15 @@

package de.undercouch.gradle.tasks.download;

import de.undercouch.gradle.tasks.download.org.apache.http.HttpRequestInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpResponseInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.auth.AuthScheme;
import de.undercouch.gradle.tasks.download.org.apache.http.auth.Credentials;

import java.io.File;
import java.net.MalformedURLException;
import java.util.Map;

import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.auth.AuthScheme;
import org.apache.http.auth.Credentials;

/**
* An interface for classes that perform file downloads
* @author Michel Kraemer
Expand Down
Expand Up @@ -14,15 +14,15 @@

package de.undercouch.gradle.tasks.download.internal;

import de.undercouch.gradle.tasks.download.org.apache.http.HttpHost;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpRequestInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpResponseInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.client.CloseableHttpClient;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.http.HttpHost;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.impl.client.CloseableHttpClient;

/**
* An implementation of {@link HttpClientFactory} that caches created clients
* until the {@link #close()} method is called.
Expand Down
Expand Up @@ -14,16 +14,16 @@

package de.undercouch.gradle.tasks.download.internal;

import java.io.IOException;
import de.undercouch.gradle.tasks.download.org.apache.http.Header;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpEntity;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpException;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpResponse;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpResponseInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.message.BasicHeader;
import de.undercouch.gradle.tasks.download.org.apache.http.protocol.HTTP;
import de.undercouch.gradle.tasks.download.org.apache.http.protocol.HttpContext;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import org.apache.http.protocol.HttpContext;
import java.io.IOException;

/**
* Intercepts HTTP responses and replaces the invalid Content-Encoding
Expand Down
Expand Up @@ -14,9 +14,9 @@

package de.undercouch.gradle.tasks.download.internal;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.entity.HttpEntityWrapper;
import de.undercouch.gradle.tasks.download.org.apache.http.Header;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpEntity;
import de.undercouch.gradle.tasks.download.org.apache.http.entity.HttpEntityWrapper;

/**
* Wraps around {@link HttpEntity} and replaces its content type
Expand Down
Expand Up @@ -14,26 +14,25 @@

package de.undercouch.gradle.tasks.download.internal;

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpHost;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpRequestInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpResponseInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.config.Registry;
import de.undercouch.gradle.tasks.download.org.apache.http.config.RegistryBuilder;
import de.undercouch.gradle.tasks.download.org.apache.http.conn.HttpClientConnectionManager;
import de.undercouch.gradle.tasks.download.org.apache.http.conn.socket.ConnectionSocketFactory;
import de.undercouch.gradle.tasks.download.org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.client.CloseableHttpClient;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.client.HttpClientBuilder;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.conn.SystemDefaultRoutePlanner;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;

import org.apache.http.HttpHost;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import org.apache.http.impl.conn.SystemDefaultRoutePlanner;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

/**
* Default implementation of {@link HttpClientFactory}. Creates a new client
Expand Down
Expand Up @@ -14,13 +14,13 @@

package de.undercouch.gradle.tasks.download.internal;

import org.apache.http.HttpHost;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.impl.client.CloseableHttpClient;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpHost;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpRequestInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.HttpResponseInterceptor;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.client.CloseableHttpClient;

/**
* Factory for Apache {@link org.apache.http.client.HttpClient} objects
* Factory for Apache {@link CloseableHttpClient} objects
* @author Michel Kraemer
*/
public interface HttpClientFactory {
Expand Down
Expand Up @@ -14,32 +14,31 @@

package de.undercouch.gradle.tasks.download;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import de.undercouch.gradle.tasks.download.org.apache.http.auth.Credentials;
import de.undercouch.gradle.tasks.download.org.apache.http.auth.UsernamePasswordCredentials;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.auth.BasicScheme;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.auth.DigestScheme;
import de.undercouch.gradle.tasks.download.org.apache.http.impl.auth.NTLMScheme;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.auth.DigestScheme;
import org.apache.http.impl.auth.NTLMScheme;
import org.gradle.api.tasks.TaskExecutionException;
import org.junit.Before;
import org.junit.Test;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.handler.ContextHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

/**
* Tests if the plugin can access a resource that requires authentication
* @author Michel Kraemer
Expand Down

0 comments on commit 199aed1

Please sign in to comment.