Опять же, Нил абсолютно прав. Но иногда поставщики по какой-либо причине имеют несколько файлов .jar, содержащих одни и те же пакеты. Иногда это делается, когда они хотят предоставить небольшие файлы .jar для скрытой реализации своего продукта. Примером того, почему это может быть сделано, является то, что у них есть алгоритм обработки текста для документа EDI, который отличается от алгоритма обработки текста для документа xml. В этом примере они могут создать два файла .jar (версии 1 и 2), содержащие файл «badlyPlannedImplementation.util», содержащий разные классы реализации. Лично я сталкивался с этим всего пару раз, но вопрос в том, как вы с этим справляетесь?
Когда вы сталкиваетесь с проблемой, когда у вас есть два файла .jar, которые экспортируют один и тот же пакет, и вы хотите получить доступ к обоим классам пакетов, вы используете механизм, называемый «затенение». Затенение — это когда вы берете эти два пакета и собираете их содержимое вместе в другом пакете файлов .jar. Раньше это делал плагин maven под названием «maven-shade-plugin», но теперь эта функциональность является частью плагина maven-bundle.
Сначала создайте новый проект, назовем его «badlyPlannedImplementationShaded». Затем в вашем проекте создайте файл pom.xml. В разделе зависимостей включите зависимости для обоих файлов .jar, которые вы пытаетесь затенить вместе.
Затем добавьте следующее в раздел сборки.
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactid>
<version>2.1.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-Version>${project.version}</Bundle-Version>
<Export-Package>
badlyPlannedImplementation.util;version="1",
badlyPlannedImplementation.util;version="2"
</Export-Package>
</instructions>
</configuration>
</plugin>
Это создаст новый пакет, содержащий пакет util, содержащий все классы из двух файлов .jar, которые вы пытались использовать.
Надеюсь, это поможет!
person
Mike Van
schedule
14.09.2011