Перемещение классов fastxml.jackson в my.package.fastxml.jackson

Я пытаюсь переместить пакеты из "com.fasterxml.jackson" в мой собственный пакет (то есть, "mypackage.com.fasterxml.jackson") и затем использовать его в другом JAR, который у меня есть.

Мне удалось запустить плагин Maven-Shade, чтобы сделать это с помощью этой конфигурации:

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <shadedArtifactAttached>false</shadedArtifactAttached>
                        <createDependencyReducedPom>true</createDependencyReducedPom>
                        <relocations>
                            <relocation>
                                <pattern>com.fasterxml.jackson</pattern>
                                <shadedPattern>mypackage.com.fasterxml.jackson</shadedPattern>
                            </relocation>
                        </relocations>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь ее использовать, по какой-то причине Eclipse продолжает добавлять зависимость к исходному Джексону ("mypackage.com.fasterxml.jackson"), а не к новому.

Просто чтобы прояснить, моя установка такова: - Jar X зависит от ThirdPartyArtifcats. - ThirdPartyArtifcats ссылается на Джексона и запускает плагин maven-shade, поэтому он содержит модифицированную версию Джексона (mypackage.com.fasterxml.jackson).

Когда я пытаюсь использовать ObjectMapper Джексона в Jar X, Eclipse продолжает давать ссылку на оригинальный Джексон.

Я буду признателен за вашу помощь!

1 ответ

Решение

В конце концов я использовал JarJar и создал модифицированный JAR. Затем я добавил в свой код зависимость и обновил ее вручную, чтобы теперь она соотносилась с измененным пакетом, а не с исходным пакетом.

Вот процедура, описывающая то, что я сделал:


Как использовать JarJar для перемещения классов JAR из одного пакета в другой

В этом примере мы изменим пакет с "com.fasterxml.jackson" на "io.kuku.dependencies.com.fasterxml.jackson". - Исходный JAR называется "jackson-databind-2.6.4.jar", а новый модифицированный (целевой) JAR называется "kuku-jackson-databind-2.6.4.jar". - JAR-файл "jarjar" находится в версии 1.4

  1. Создайте файл "rules.txt". Содержимое файла должно быть (смотрите точку перед символом "@"): правило com.fasterxml.jackson.** io.kuku.dependencies.com.fasterxml.jackson.@1

  2. Выполните следующую команду: java -jar jarjar-1.4.jar process rules.txt jackson-databind-2.6.4.jar kuku-jackson-databind-2.6.4.jar


Установка модифицированных JAR-файлов в локальный репозиторий

В этом случае я устанавливаю 3 файла, расположенных в папке "c:\my-jars\".

mvn install: install-file -Dfile = C: \ my-jars \ kuku-jackson-annotations-2.6.4.jar -DgroupId = io.kuku.dependencies -DartifactId = kuku-jackson-annotations -Dversion=2.6.4 -Dpackaging= баночка

mvn install:install-file -Dfile=C:\my-jars\kuku-jackson-core-2.6.4.jar -DgroupId=io.kuku.dependencies -DartifactId=kuku-jackson-core -Dversion=2.6.4 -Dpackaging= баночка

mvn install:install-file -Dfile=C:\my-jars\kuku-jackson-databind-2.6.4.jar -DgroupId=io.kuku.dependencies -DartifactId= Куку-Джексон-аннотации -Dversion=2.6.4 -Dpackaging= баночка


Использование модифицированных файлов JAR в pom проекта

В этом примере это элемент "dependencies" в проектах pom:

<dependencies>
<!-- ================================================== -->
<!-- kuku JARs -->
<!-- ================================================== -->
<dependency>
    <groupId>io.kuku.dependencies</groupId>
    <artifactId>kuku-jackson-annotations</artifactId>
    <version>2.6.4</version>
</dependency>
<dependency>
    <groupId>io.kuku.dependencies</groupId>
    <artifactId>kuku-jackson-core</artifactId>
    <version>2.6.4</version>
</dependency>
<dependency>
    <groupId>io.kuku.dependencies</groupId>
    <artifactId>kuku-jackson-databind</artifactId>
    <version>2.6.4</version>
</dependency>

Другие вопросы по тегам