在将 Guava 升级到最新的 23.5 时得到 Preconditions.checkArgument 的 NoSuchMethodError

On upgrading Guava to the latest 23.5 getting NoSuchMethodError for Preconditions.checkArgument

在将 Guava 从 18.0 升级到最新的 23.5-jre 时,出现如下异常

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
    at com.van.common.VanExecutors.getSpec(VanExecutors.java:91)
    at com.van.common.VanExecutors.newFixedSizeExecutor(VanExecutors.java:114)
    at com.van.storage.config.ConfigStoreFactory.getOrCreateUncachedStore(ConfigStoreFactory.java:56)
    at com.van.storage.config.ConfigStoreFactory.getOrCreateStore(ConfigStoreFactory.java:74)
    at com.van.storage.config.PolicyManager.loadFromSystemProperties(PolicyManager.java:79)
    at com.van.tools.metric.HbaseMetricStoreSetup.main(HbaseMetricStoreSetup.java:25)

相关代码

private ExecutorSpec getSpec(String executorName) {
        Preconditions.checkArgument(isValid(), "Not initialized");
        Preconditions.checkArgument(NullOrEmpty.isFalse(executorName), "No executor name given");
        Preconditions.checkArgument(POOL_NAME_PATTERN.matcher(executorName).matches(), "Executor name %s must end with -exec", executorName);
        for (ExecutorSpec spec : executorsSpec.getExecutorSpecList()) {
            if (spec.getName().equalsIgnoreCase(executorName)) return spec;
        }
        return null;
    }

根据堆栈跟踪,第 91 行是最后一次前提条件检查。

有人可以告诉我出了什么问题吗?

在我看来,方法 isValid() returns 一个 String (这是改变了吗?)但是一个 boolean is expected (and was in release 18 too).

为了解决这个问题,我在 CLASSPATH ( export CLASSPATH=<guava-23.5>;$CLASSPATH ) 前面加上了 Guava 23.5 jre。