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

时间:2018-11-19 13:34:04

标签: java dialogflow nosuchmethoderror

我正在尝试创建一个API,该API触发后会向Dialogflow发送一个请求。 为此,我使用的是here中的Java SDK。

有问题的代码段从here复制粘贴到页面底部。

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

在运行时抛出。经过研究,看来这与所包含的库的不同版本mainly protobuf and 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 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并将其添加到我的pom.xml中,并修复了错误:

class Checkbox extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      checked: true,
    };
    this.onChange = this.onChange.bind();
  }
  onChange = () => {
    this.setState({
      checked: !this.state.checked
    });
    console.log(this.state.checked)
  }
  render() {
    return ( <
      div className = {
        `checkbox ${this.props.color}`
      }
      onClick = {
        this.onChange
      } >
      <
      div > {
        this.state.checked &&
        <
        span className = "checkbox-box-mark" >
        <
        svg viewBox = "0 0 64 64"
        xmlns = "http://www.w3.org/2000/svg" > < path d = "M21.33,57.82,0,36.53l5.87-5.87L21.33,46.09,58.13,9.36,64,15.23,21.33,57.82" / > < /svg> <
        /span>
      } <
      /div>    <
      div className = "checkbox-label" > checkbox < /div>  <
      /div>     
    )
  }
}
export default Checkbox

答案 1 :(得分:0)

在Google Cloud存储库上提出问题之后,看起来确实是a problem with Guava,所以这是他们的错误。我仍然不确定这会如何被忽略,因为某种程度上他们的快速入门指南一定在某个时候起作用了,但是确实如此。感谢那些烦恼反对这个问题的人。

答案 2 :(得分:0)

除了从这里添加 Guava 的依赖项:

https://mvnrepository.com/artifact/com.google.guava/guava

确保它在 pom.xml 文件中高于其他文件,这对我来说很重要。 我假设如果首先加载其他 Guava 版本作为依赖项,则使用这些版本。 我没有在输出中找到:

mvn dependency:tree