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

时间:2017-07-21 21:51:25

标签: 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.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)

代码:

Blob blob = storage.get(blobId);
if(blob.exists()) {
    return true;
}

6 个答案:

答案 0 :(得分:22)

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

使用

mvn dependency:tree | less

寻找番石榴版本。

答案 1 :(得分:8)

请将以下依赖项添加到项目的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>

答案 2 :(得分:2)

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

我找不到直接解决上面@Laurent Perez定义的Guava问题的措施,因此我执行了以下操作,通过运行 .Jar 文件解决了该问题:

  • 从IntelliJ中删除了 .Jar IntelliJ配置和文件。然后根据本部署指南中的Step 3重新添加 .Jar

如果以上方法无效,请尝试其他操作:

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

答案 3 :(得分:1)

对于遇到这种情况的任何人,我都有以下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>

然后注释掉Maven-shade插件为我修复了它...

答案 4 :(得分:1)

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

class Team(models.Model):
     
    title = models.CharField(max_length=150)
    members = models.ManyToManyField("accounts.CustomUser", blank=True, related_name='team_members')
    company = models.ForeignKey("company.Company",
                                null=True,
                                blank=True,
                                on_delete=models.SET_NULL,
                                related_name='teams')

另一个原因可能是 google guava/collection 库有多个版本,你不能同时拥有 @sabbir 在他的 comment 中提到的两个版本,你应该删除其中一个。

最后可能是其他一些依赖项依赖于以前版本的 google guava/collections。转到 Dependency Hierarchy 并搜索 google 并查看所有依赖项都依赖于以前的版本。在我的情况下,它是由 version-maven-plugin,版本 2.7

这里version-maven-plugin,2.7版使用google collections 1.0,我需要guava 24.0 两者不能同时工作。 enter image description here

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

WITH MANAGERS
    (EMPID, 
     ENAME,
     MID,
     MNAME,
     DEPTH)
AS
(
SELECT EMPLOYEE_ID AS EMPID,
       FIRST_NAME||' '||LAST_NAME AS ENAME,
       MANAGER_ID AS MID,
       FIRST_NAME||' '||LAST_NAME AS MNAME,
       0
    FROM EMPLOYEES 
    WHERE MANAGER_ID IS NULL
UNION ALL
SELECT EMPLOYEES.EMPLOYEE_ID AS EMPID,
       EMPLOYEES.FIRST_NAME||' '||EMPLOYEES.LAST_NAME AS ENAME,
       EMPLOYEES.MANAGER_ID AS MID,
       MANAGERS.MNAME,
       MANAGERS.DEPTH+1 
    FROM EMPLOYEES JOIN MANAGERS
    ON EMPLOYEES.MANAGER_ID=MANAGERS.EMPID
)
SELECT * FROM MANAGERS
ORDER BY DEPTH;

结果:现在 google-collections 不见了。 enter image description here

答案 5 :(得分:0)

就我而言,我碰巧同时包含了

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

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

事实证明,我不能同时使用这两个库。删除Google收藏集可以解决此问题。