У меня есть многопроектное приложение, в котором мы используем библиотеку oshi, которая зависит от версии 4.2.2 от JNA. В нашем проекте мы используем 4.3.0, который еще не выпущен. Мы внесли вклад, который будет в версии 4.3.0, когда он будет выпущен, но нам это нужно прямо сейчас, поэтому в настоящее время мы используем раздвоенную версию, которую мы создаем сами.Затенение нескольких версий одинаковых зависимостей, необходимых для функционирования приложения
Мы упаковываем все, используя плагин maven shade. В настоящее время теневой плагин использует 4.3.0 в uberjar.
Проблема в том, что oshi использует функцию в 4.2.2, которая, похоже, не в 4.3.0. Интерфейс, который мы используем, был изменен, и теперь мы получаем исключение NoSuchMethodError. Исключение мы получаем следующий вид:
org.quartz.JobExecutionException: org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.NoSuchMethodError: com.sun.jna.platform.win32.OleAuto.VariantClear(Lcom/sun/jna/Pointer;)Lcom/sun/jna/platform/win32/WinNT$HRESULT;]
at org.quartz.core.JobRunShell.run(JobRunShell.java:218) [quartz-2.2.3.jar:?]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.2.3.jar:?]
Caused by: org.quartz.SchedulerException: Job threw an unhandled exception.
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [quartz-2.2.3.jar:?]
... 1 more
Caused by: java.lang.NoSuchMethodError: com.sun.jna.platform.win32.OleAuto.VariantClear(Lcom/sun/jna/Pointer;)Lcom/sun/jna/platform/win32/WinNT$HRESULT;
at oshi.util.platform.windows.WmiUtil.enumerateProperties(WmiUtil.java:504) ~[oshi-core-3.2.jar:3.2]
at oshi.util.platform.windows.WmiUtil.queryWMI(WmiUtil.java:304) ~[oshi-core-3.2.jar:3.2]
at oshi.util.platform.windows.WmiUtil.selectUint32sFrom(WmiUtil.java:112) ~[oshi-core-3.2.jar:3.2]
at oshi.hardware.platform.windows.WindowsGlobalMemory.updateSwap(WindowsGlobalMemory.java:74) ~[oshi-core-3.2.jar:3.2]
at oshi.hardware.common.AbstractGlobalMemory.getSwapTotal(AbstractGlobalMemory.java:82) ~[oshi-core-3.2.jar:3.2]
Так что мне нужно сделать, это выяснить, как иметь обе версии в uberjar.
Я пробовал relocating версию 4.3.0, но она, похоже, не работала (классы не были в uberjar в любом месте). Далее я клянусь, что сегодня я читал (но, конечно, не могу найти его сейчас), что шаблон в поле перемещения - groupId:artifactId[:type][:classifier]
без опции для версии.
Соответствующая часть моего дерева зависимостей выглядит следующим образом:
myproject
+-oshi-core
| +- jna 4.2.2
+-jna 4.3.0-CUSTOM
Может кто-нибудь дать мне какие-либо предложения о том, как решить эту проблему? Спасибо!
Перемещая вы имеете в виду перемещения банки от одного модуля другому? Или что это значит? Также вы можете делиться минимальными зависимостями, которые вы, наконец, попадаете в ваш pom как с 'oshi', так и с настройкой' JNA', пожалуйста. – nullpointer
Я обновил вопрос в ответ. –
Если обе эти реализации конфликтуют друг с другом, почему вы хотите использовать обе зависимости в этом случае? – nullpointer