Как переупаковать HttpClient 4.3.1 и удалить зависимости от общего журнала?

Я хочу упаковать httpclient lib Apache, чтобы отправить его с приложением для Android (например,https://code.google.com/p/httpclientandroidlib/ но с HttpClient 4.3.1)

следовательно, язагруженный jar httpclient 4.3.1 (включает все его зависимости) вручную и использовал jarjar для его перепаковки:

x@x$: cd libs && for f in *.jar; do java -jar ../jarjar-1.4.jar process ../rules.txt $f out/my-$f; done

с участиемRules.txt:

 rule org.apache.http.** my.repackaged.org.apache.http.@1

Затем я использовал ant, чтобы соединить вывод:

<project name="MyProject" default="merge" basedir=".">
  <target name="merge">
        <zip destfile="my-org-apache-httpclient-4.3.1.jar">
            <zipgroupfileset dir="libs/out" includes="*.jar"/>
        </zip>
  </target>
</project>

Я могу использовать этот файл для разработки и тестирования своего приложения, но если я разверну его на Android, оно выдаст исключение s / th, как будто оно не может найтиmy.repackaged.org.apache.logging.log4j.something ссылается наmy.package.org.apache.logging.whatEver.

Итак, теперь я хочу избавиться от любой зависимости от ведения журнала с помощью использования байт-кода. Это было сделано раньше:http://sixlegs.com/blog/java/dependency-killer.html

Но мне интересно, как я на самом деле это делаю? Есть только зависимости от org.apache.commons.logging.Log:

x$x$: java -jar jarjar-1.4.jar find jar my-org-apache-httpclient-4.3.1.jar commons-logging-1.1.3.jar
my/http/impl/execchain/ServiceUnavailableRetryExec -> org/apache/commons/logging/Log
my/http/impl/execchain/RetryExec -> org/apache/commons/logging/Log
my/http/impl/execchain/RedirectExec -> org/apache/commons/logging/Log
my/http/impl/execchain/ProtocolExec -> org/apache/commons/logging/Log
...

Я думаю, что путь состоит в том, чтобы удалить эти зависимости и заменить его собственной реализацией, как он сделал здесьhttps://code.google.com/p/httpclientandroidlib/ , Поэтому я сделал новый проект Maven только с одним классом сprovided область для регистрации общего достояния, которая реализует интерфейс org.apache.commons.logging.Log и просто удаляет файлы вandroid.utils.Log:

MyLog implements org.apache.commons.logging.Log {}

в упаковкеmy.log и я упаковал это в my-log-1.0.0.jar. Я поместил этот jar в ту же папку, что и перепакованные httpclient-jars, и использовал ant, как упомянуто выше, чтобы упаковать все вместе в my-org-apache-httpclient-4.3.1.jar.

Подход 1

Я попытался использовать jarjar снова:

java -jar jarjar-1.4.jar process rules2.txt my-org-apache-httpclient-4.3.1.jar my-org-apache-httpclient-4.3.1-without-logging-dep.jar

с участиемrules2.txt:

rule my.repackaged.commons.logging.** my.log.@1

но это не работает. Исключение, которое он не может найтиmy.repackaged.org.apache.logging.log4j.something ссылается наmy.package.org.apache.logging.whatEver все еще брошен.

Подход 2

Я также попытался удалить материал журналирования из окончательного jar и / или перепаковать my.repackaged.org.apache.log4j и войти в его исходные пакеты:

rules2.txt v2:

rule my.repackaged.org.apache.log4j.** org.apache.log4j.@1
rule my.repackaged.org.apache.logging.** org.apache.logging.@1

но это также все еще бросает исключение:my.repackaged.org.apache.logging.log4j.something ссылается наmy.package.org.apache.logging.whatEver

ВОПРОС

Как я могу убить / заменить эти зависимости общего журнала и избавиться от исключения?

Ответы на вопрос(1)

Ваш ответ на вопрос