Cloud Translate API Java 客户端 - 使用源、目标语言时出现问题

Cloud Translate API Java client - problems using source, target lang

我有一个问题希望得到解决。首先,当我使用源语言和目标语言调用云翻译服务时,遇到以下错误:

java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at com.google.cloud.translate.TranslateImpl.optionMap(TranslateImpl.java:131)
at com.google.cloud.translate.TranslateImpl.access[=12=]0(TranslateImpl.java:40)
at com.google.cloud.translate.TranslateImpl.call(TranslateImpl.java:113)
at com.google.cloud.translate.TranslateImpl.call(TranslateImpl.java:110)

这就是我正在做的事情:

protected Translate getTranslationServiceClient() throws IOException {
        if (translationServiceClient == null) {
            synchronized (this) {
                if (translationServiceClient == null) {

                    try (InputStream is = new FileInputStream(new File(getCredentialFilePath()))) {

                        final GoogleCredentials myCredentials = GoogleCredentials.fromStream(is);
                        translationServiceClient = TranslateOptions.newBuilder().setCredentials(myCredentials).build().getService();
                    } catch (IOException ioe) {
                        throw new NuxeoException(ioe);
                    }

                }
            }
        }

        return translationServiceClient;
    }

    public TranslationResponse translateText(String text, String sourceLanguage, String targetLanguage) throws IOException {

        Translation response = translationService.translate(text, TranslateOption.sourceLanguage("en"), TranslateOption.sourceLanguage("es"));
        //System.out.println(response.getTranslatedText());
        GoogleTranslationResponse gtr = new GoogleTranslationResponse(response);

        return gtr;
    }

错误指向 Cloud 的 TranslateImpl class optionMap 方法并在 checkArgument 上溢出 NoSuchMethodError。我是否错误地传递了 TranslateOption??:

private Map<TranslateRpc.Option, ?> optionMap(Option... options) {
Map<TranslateRpc.Option, Object> optionMap = Maps.newEnumMap(TranslateRpc.Option.class);
for (Option option : options) {
  Object prev = optionMap.put(option.getRpcOption(), option.getValue());
  checkArgument(prev == null, "Duplicate option %s", option);
}
return optionMap;

}

为了从 API 获得任何类型的响应,我尝试在不传递任何选项或仅传递 targetLanguage 的情况下调用该服务。没有任何选项,我没有任何错误,并且我的短信按预期被翻译成英文。如果我只是添加 TranslateOption.targetLanguage("es"),我仍然会得到 NoSuchMethodError。

我遇到了完全相同的错误。问题是 Google Guava 的一个古老版本被其他依赖引入。我通过 运行 mvn dependency:tree 找到了这个。我不得不像这样排除古老版本的番石榴

<exclusions>
    <exclusion>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    </exclusion>
</exclusions>