首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对运行中的应用程序所需的同一依赖项的多个版本进行阴影处理

对运行中的应用程序所需的同一依赖项的多个版本进行阴影处理
EN

Stack Overflow用户
提问于 2016-12-07 17:15:45
回答 1查看 1.2K关注 0票数 2

我有一个多项目应用程序,其中我们使用了一个库小石,它依赖于南国防军的4.2.2版本。在我们的项目本身中,我们使用了4.3.0,它还没有发布。我们所做的贡献将在4.3.0中发布,但我们现在需要它,所以我们目前使用的是分叉版本,我们自己构建的。

我们使用maven阴影插件来打包所有的东西。目前,阴影插件在uberjar中使用了4.3.0。

问题是,oshi在4.2.2中使用了一个函数,而在4.3.0中似乎并非如此。我们使用的接口被更改了,现在我们得到了NoSuchMethodError异常。我们得到的例外情况如下:

代码语言:javascript
复制
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中同时使用这两个版本。

我尝试过4.3.0版本的搬迁,但它似乎不起作用(类不在任何地方)。此外,我发誓我今天早些时候读过(当然现在找不到),重新定位字段中的模式是groupId:artifactId[:type][:classifier],没有版本选项。

依赖树的相关部分如下所示:

代码语言:javascript
复制
myproject
+-oshi-core
|   +- jna 4.2.2
+-jna 4.3.0-CUSTOM

有人能就如何解决这个问题给我提点建议吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-12-07 19:55:05

您所要寻找的可能是maven-shade plugin的<includes>实现为记录在这里

当然,也可以使用<includes>来指定工件的白列表。工件由表单groupId:artifactId[[:type]:classifier]的复合同一性表示。从插件版本1.3开始,通配符“*”和“?”可用于进行类似球体的模式匹配. 对于包含来自所选依赖项的哪些类的细粒度控制,可以使用工件筛选器:

e.g

代码语言:javascript
复制
<configuration>
     <filters>
         <filter>
            <artifact>com.github.dblock:oshi-core</artifact>
            <includes>
                <include><!--some package you want to include here--></include>
            </includes>
         </filter>
         <filter>
            <artifact>net.java.dev.jna:jna</artifact>
            <includes>
                <include><!--the package from 4.2.0 you want to keep--></include>
            </includes>
          </filter>
      </filters>
</configuration>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41023486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档