【问题标题】:Exception when using google guava and google collections at once一次使用 google guava 和 google 集合时出现异常
【发布时间】:2012-10-22 20:53:42
【问题描述】:

我的 java 代码依赖于 2 个库 A 和 B

A 依赖于 GoogleCollections B 有依赖 GoogleGuava r10;

Now when i build  my code everything works fine.But when i run i get following exception

java.lang.NoSuchMethodError: com.google.common.collect.ImmutableList.copyOf([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList;
    at com.abc.Pqr$Builder.withXYZ(ExponentialBackoffRetryPolicy.java:329)

我该如何解决这个问题?

【问题讨论】:

    标签: java dependencies resolve


    【解决方案1】:

    Google Collections 已被弃用并移至 Guava。从 A 中排除它。使用 Maven,您可以使用 您的项目的 POM 中依赖项标签下方的排除标签来执行此操作:

        <dependency>
            <groupId>org.project</groupId>
            <artifactId>library-a</artifactId>
            <version>[version]</version>
            <exclusions>
                <exclusion>
                    <!-- whatever the correct values are -->
                    <artifactId>google-collections</artifactId>
                    <groupId>google-collections</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    

    【讨论】:

    • 我无法控制 A 作为它的第三方库,我无法编辑它的依赖项。我可以覆盖它的任何其他方式吗?\
    • 对于那些希望排除 google-collections:com.google.collectionsgoogle-collections
    【解决方案2】:

    如果你幸运的话.. 仅包含包含您所依赖的 ImmutableList 的最新版本的 GoogleCollections..

    【讨论】:

    • 你能告诉我为什么会出现这个错误吗?google guavuas 内部是否依赖于 google 集合?我可以删除任何依赖项,我只能添加新版本的番石榴或集合。你能详细说明一下吗?跨度>
    • 类加载器加载的 GoogleCollections 版本中缺少 ImmutableList.copyOf 方法(很可能是 Google Collections 的旧版本),只需尝试添加最后一个版本(并删除旧版本一次。 ..) 并交叉你的手指...
    猜你喜欢
    • 2013-10-10
    • 2011-10-18
    • 1970-01-01
    • 2017-12-13
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多