Перемещение классов 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
Создайте файл "rules.txt". Содержимое файла должно быть (смотрите точку перед символом "@"): правило com.fasterxml.jackson.** io.kuku.dependencies.com.fasterxml.jackson.@1
Выполните следующую команду: 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>