의 버전 4.2.2에 따라 달라지는 라이브러리 oshi을 사용하는 다중 프로젝트 응용 프로그램이 있습니다. 프로젝트 자체에서는 아직 출시되지 않은 4.3.0을 사용합니다. 우리는 출시 될 때 4.3.0에 기여할 것이지만, 지금 당장 필요합니다. 그래서 우리는 현재 스스로 구축 한 갈래 버전을 사용합니다.작동중인 응용 프로그램에 대해 동일한 종속성의 여러 버전 음영 처리
우리는 maven shade 플러그인을 사용하여 모든 것을 패키지화합니다. 현재 shade plugin은 uberjar에서 4.3.0을 사용합니다.
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