gpt4 book ai didi

scala - 如何在非托管依赖项 .jar 文件中隔离库,以免它们与其他库发生冲突

转载 作者:行者123 更新时间:2023-12-04 18:30:08 24 4
gpt4 key购买 nike

我需要将 .jar 作为非托管依赖项添加到 sbt Scala 项目(它是 java-stellar-sdk )。一切正常,只要我不运行 sbt test . .jar 文件中似乎有一个 Mockito 版本与我在项目中使用的版本冲突。我收到很多错误,即找不到某些 Mockito 匹配器,但在 lib 文件夹中没有 .jar 的情况下一切正常。

有没有办法告诉 sbt 它应该忽略 .jar 中的某些库或托管依赖项优先?我还找到了 this related question但显然它没有帮助我。

另一种解决方法也有很大帮助。是否有可能以某种方式隔离 jar 中的库,以便我只使某个包对外部可见?

更新: .jar 包含 Mockito 2,但我的项目使用 Mockito 1,所以这是一个非常简单和明显的冲突,我可以通过升级到 Mockito 2(我尝试过并且它有效)来解决。但是,问题仍然存在:是否有另一种合理的方法来隔离 .jar 中的 Mockito 依赖项,以免干扰我的项目,以防我无法或不想解决冲突购买切换到较新版本的库有问题。也许更改 .jar 以重命名冲突的包?我不知道。类似的东西。

我知道这是一个非常笼统的问题,可能已经在其他地方进行了深入讨论。但是,我没有找到任何让我真正满意的东西。链接到该主题的相关讨论当然也很受欢迎。

最佳答案

我可以为您想到3种方法(从简单到难排序):

  • 从 jar 文件中手动删除 mockito 2。
    由于jar只是一个zip文件,您可以将其解压缩,删除所有冲突文件,然后重新打包。
  • 自己从源代码编译该 jar,并将 mockito 设置为测试依赖项(应该如此)。如果您这样做,请考虑使用您的更改打开 PR,为社区解决问题
  • 遮蔽 jar 中的 mockito 文件。
    shading是按照一定的规则对jar文件中的所有文件进行重命名的过程。您可以使用 jarjarlinks或与 sbt assembly插入。请参阅此答案以帮助您开始使用 sbt 程序集:https://stackoverflow.com/a/47974750/245024
  • 关于scala - 如何在非托管依赖项 .jar 文件中隔离库,以免它们与其他库发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49150270/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com