NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Object;)V
Я пытаюсь создать API, который при запуске отправляет запрос в Dialogflow. Для этого я использую Java SDK, как показано здесь.
Проблемный фрагмент кода вставляется в конец страницы.
try (SessionsClient sessionsClient = SessionsClient.create()) {
SessionName session = SessionName.of(genericProjectId, genericSessionId);
QueryInput queryInput = QueryInput.newBuilder().build();
DetectIntentResponse response = sessionsClient.detectIntent(session,
queryInput);
}
Когда я запускаю "SessionsClient.create()", ошибка
javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Object;)V
выбрасывается во время выполнения. После исследования кажется, что это как-то связано с различными версиями включаемых библиотек, в основном protobuf и guava; Тем не менее, я урезал свой POM настолько, насколько это возможно, и он не уходит.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>MYPROJECTNAME</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-dialogflow</artifactId>
<version>0.71.0-alpha</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>MYPROJECTNAME</finalName>
<plugins>
</plugins>
</build>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<failOnMissingWebXml>false</failOnMissingWebXml>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<projectId>MYPROJECTID</projectId>
</properties>
</project>
Запуск mvn depenceny:tree не показывает никаких проблем, и, открыв созданный WAR-архив, я не вижу дубликатов библиотеки. Пробная компиляция как с NetBeans, так и с помощью командной строки, проблема все еще сохраняется. Приложение работает на Windows, используя Java 8 и Payara в качестве сервера. Что я делаю неправильно?
Спасибо за любую помощь
3 ответа
У меня была такая же проблема, и я добавил это в свой pom.xml, и это устранило ошибку:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.6-jre</version>
</dependency>
После того, как возникла проблема с репозиторием Google Cloud, похоже, что это действительно проблема с Guava, так что это ошибка с их стороны. Я до сих пор не уверен, как это могло пройти незамеченным, поскольку каким-то образом их руководство по быстрому запуску должно было сработать в какой-то момент, но это так. Спасибо тем, кто озаботился голосованием по этому вопросу.
Помимо добавления зависимости для Guava отсюда:
https://mvnrepository.com/artifact/com.google.guava/guava
убедитесь, что он выше других в файле pom.xml, что имело значение в моем случае. Я предполагаю, что если другие версии Guava сначала загружаются как зависимости, они используются. Я не нашел этого в выводе:
mvn dependency:tree