NoSuchMethodError:com.google.common.base.premissions.checkArgument(ZLjava/lang/String;J)V

NoSuchMethodError:com.google.common.base.premissions.checkArgument(ZLjava/lang/String;J)V,java,maven,google-cloud-platform,google-cloud-storage,Java,Maven,Google Cloud Platform,Google Cloud Storage,Google Maven依赖项可以修复此错误: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;J)V at com.google.cloud.storage.spi.v1.HttpStorageRpc.read(HttpStorageRpc.java:487) at com.google.cloud.storage.BlobRea

Google Maven依赖项可以修复此错误:

java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;J)V
    at com.google.cloud.storage.spi.v1.HttpStorageRpc.read(HttpStorageRpc.java:487)
    at com.google.cloud.storage.BlobReadChannel$1.call(BlobReadChannel.java:127)
    at com.google.cloud.storage.BlobReadChannel$1.call(BlobReadChannel.java:124)
    at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:94)
    at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:54)
    at com.google.cloud.storage.BlobReadChannel.read(BlobReadChannel.java:124)
    at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65)
    at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:109)
    at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:103)
    at java.io.InputStream.read(InputStream.java:101)
代码:


您的Google guava版本太旧(<20.0)或不匹配(多个jars版本)。确保依赖关系树中没有多个版本

使用


要查找guava版本,请在项目的POM中添加以下依赖项:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.6-jre</version>
</dependency> 
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.8</version>
</dependency>

番石榴
番石榴
23.6-jre
org.apache.httpcomponents
httpcore
4.4.8

我在Java/Kotlin应用程序中遇到了同样的问题。当应用程序通过IntelliJ运行时,没有任何问题。但是,当运行.Jar时,会抛出上面的错误消息

我找不到可以对上面@Laurent Perez定义的番石榴问题采取直接行动的项目,因此我执行了以下操作,通过运行.Jar文件解决了问题:

  • 已从IntelliJ中删除.JarIntelliJ配置和文件。然后重新添加本部署指南中的.Jar
如果上述操作不起作用,请尝试其他操作:

  • 重建项目
  • 使IntelliJ缓存无效并重新启动
  • 重新启动计算机

尝试在包含项目的pom.xml中的依赖项顶部插入包含较新版本番石榴的依赖项

例如


番石榴
番石榴
24.1.1-jre

在我的例子中,我碰巧包括了这两个方面

    <dependency>
      <groupId>com.google.collections</groupId>
      <artifactId>google-collections</artifactId>
      <version>1.0</version>
    </dependency>

com.google.collections
谷歌收藏
1


番石榴
番石榴
28.0-jre

事实证明,我不能同时使用这两个库。删除google collections为我解决了这个问题。

对于遇到类似情况的任何人,我有以下pom:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.2.1</version>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20190722</version>
</dependency>
<dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.2</version>
</dependency>

org.apache.hadoop
hadoop客户端
3.2.1
org.json
json
20190722
org.apache.maven.plugins
maven阴影插件
3.2.2

评论maven shade插件为我修复了它

当您的依赖项缺少番石榴库时,就会发生这种情况。在pom.xml中使用以下内容添加它

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>24.0-jre</version>
</dependency>

番石榴
,你应该取下其中一个

最后,可能是其他一些依赖性依赖于以前版本的google guava/collections。转到Dependency Hierarchy并搜索google,查看所有依赖项都依赖于以前的版本。在我的例子中,它是由版本maven插件,版本2.7

在这里版本maven插件,版本2.7使用谷歌收藏1.0,我需要guava 24.0两者不能同时工作。

我像这样在pom.xml中排除了它,然后添加了一个新的依赖项guava

    <dependency>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>2.7</version>
        <exclusions>
            <exclusion>
                <groupId>com.google.collections</groupId>
                <artifactId>google-collections</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>24.0-jre</version>
    </dependency>

org.codehaus.mojo

类路径上有多个版本的番石榴。找出哪些依赖项依赖于Guava,并确保只剩下一个版本。@Karl Richter,如果我们认为库之间存在冲突,Java应用程序中应该如何以及在何处定义Guava?番石榴可以被改写为只使用一个版本吗?请不要让你的答案依赖于外部链接-复制相关部分,因为链接可能随时中断。谢谢你,这实际上很重要,我不认为这会:)
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>28.0-jre</version>
    </dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.2.1</version>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20190722</version>
</dependency>
<dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.2</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>24.0-jre</version>
</dependency>
    <dependency>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>2.7</version>
        <exclusions>
            <exclusion>
                <groupId>com.google.collections</groupId>
                <artifactId>google-collections</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>24.0-jre</version>
    </dependency>