You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决GeoMesa+HBase项目POM依赖冲突引发的NoSuchMethodError问题

解决GeoMesa HBase中DataStore.createSchema抛出的NoSuchMethodError

你遇到的这个错误确实是典型的Maven依赖版本冲突问题——具体是Guava库的版本不一致,导致Curator依赖的shaded Guava中的方法无法被找到。下面是一步步的解决办法:

1. 先定位冲突来源

首先运行Maven命令查看依赖树,找出哪些依赖引入了不同版本的Guava或Curator:

mvn dependency:tree -Dincludes=com.google.guava,org.apache.curator

这个命令会过滤出所有和Guava、Curator相关的依赖,你可以看到哪个模块引入了不兼容的版本(比如Spark、HBase可能会引入和GeoMesa不匹配的Guava)。

2. 强制统一依赖版本并排除冲突

修改你的POM文件,通过以下几个步骤修复:

第一步:在dependencyManagement中添加Curator和Shaded Guava的版本控制

在<dependencyManagement>的<dependencies>里加入以下内容,确保使用和GeoMesa 2.3.1兼容的Curator版本(2.12.0是GeoMesa 2.x默认使用的版本):

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>2.12.0</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.12.0</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.curator.shaded</groupId>
    <artifactId>curator-shaded-guava</artifactId>
    <version>2.12.0</version>
</dependency>

第二步:排除其他依赖中的Guava

在你的<dependencies>里,对引入Guava的依赖(比如Spark、HBase)添加排除规则,避免它们引入的Guava覆盖Curator的shaded版本:

修改Spark依赖:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.4.0</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </exclusion>
    </exclusions>
</dependency>

修改HBase依赖:

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-common</artifactId>
    <version>${hbase.version}</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 验证并重新构建

完成上述修改后,运行以下命令清理并重新构建项目:

mvn clean install

然后再测试createSchema方法,应该就能解决这个错误了。

补充说明

错误里提到的org.apache.curator.shaded.com.google.common.collect.Maps.uniqueIndex是Curator专门shaded(重命名包)的Guava方法,而如果项目中同时存在非shaded的Guava,JVM会优先加载非shaded的版本,导致找不到shaded包中的方法。通过排除其他依赖的Guava,并强制使用Curator的shaded版本,就能解决这个冲突。

内容的提问来源于stack exchange,提问作者Theofilos Ioannidis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:45:44