在Java中尝试使用moviedbapi时发生SLF4J错误



我正在创建一个项目,该项目将使用电影数据库API。我试着让你用这个包装纸https://github.com/holgerbrandl/themoviedbapi.我从这里下载了jar文件https://mvnrepository.com/artifact/info.movito/themoviedbapi/1.10并将其作为依赖项添加到我的Intellij项目中。我正在使用Java 8。当我运行这个代码时,

TmdbMovies movies = new TmdbApi("APIKEY").getMovies();
MovieDb movie = movies.getMovie(5353, "en");

我收到这个错误,

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at info.movito.themoviedbapi.tools.WebBrowser.<clinit>(WebBrowser.java:27)
at info.movito.themoviedbapi.TmdbApi.<init>(TmdbApi.java:44)
at Test.main(Test.java:7)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 3 more

如何修复此错误?非常感谢。

如果您使用Maven来构建项目和管理依赖项,请添加以下Maven依赖项以将SLF4J和Log4j JAR文件下载到您的项目中:

<!-- SLF4J API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.30</version>
</dependency>
<!-- LOG4J -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
<scope>test</scope>
</dependency>

一旦添加了这些依赖项,请确保从Maven中执行clean build,以便从Maven的远程存储库中实际下载这些依赖项。

如果您已经设置了一个合适的Maven项目,那么只添加themoviedbapiMaven包的依赖项就足够了。这将导致Maven引入库所需的所有依赖项,包括slf4j和log4j库。

但你说你";下载jar文件";,这表明你根本没有使用Maven,或者至少没有完全使用。如果您不使用Maven,您将需要手动下载几个不同的jar文件,这是API库所需要的。最好与Maven一起做好准备。

作为对第一个答案的评论,你建议你正在使用Maven,所以我不确定发生了什么。我刚刚设置了最基本的Maven项目,并且我能够很好地运行示例代码。它抱怨没有正确的API密钥,这意味着它正在工作。

你只需要两件事就可以用Maven构建这个。。。一个主Java类文件和一个CCD_ 3文件。为您的项目创建一个目录,然后将此pom.xml文件放入其中:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<repositories>
<repository>
<id>jcenter</id>
<name>jcenter</name>
<url>https://jcenter.bintray.com</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>info.movito</groupId>
<artifactId>themoviedbapi</artifactId>
<version>1.10</version>
</dependency>
</dependencies>
</project>

然后将此文件保存在创建如下目录层次结构所示的位置:

src/main/java.com/example/demo/MainApplication.java

package com.example.demo;
import info.movito.themoviedbapi.TmdbApi;
import info.movito.themoviedbapi.TmdbMovies;
import info.movito.themoviedbapi.model.MovieDb;
public class DemoApplication {
public static void main(String[] args) {
TmdbMovies movies = new TmdbApi("APIKEY").getMovies();
MovieDb movie = movies.getMovie(5353, "en");
System.out.println(movie);
}
}

然后,如果您使用的是IDE,请将pom.xml文件作为项目加载到其中。

如果您已将Maven配置为在命令提示符下工作,只需将cd放入项目目录并键入:

mvn package

项目应该构建。然后你可以用运行它

java -jar target/demo-0.0.1-SNAPSHOT.jar com.example.demo.MainApplication

以下是我运行代码时得到的信息:

Exception in thread "main" ResponseStatus{code=7, message=Invalid API key: You must be granted a valid key.}
at info.movito.themoviedbapi.AbstractTmdbApi.mapJsonResult(AbstractTmdbApi.java:78)
at info.movito.themoviedbapi.AbstractTmdbApi.mapJsonResult(AbstractTmdbApi.java:45)
at info.movito.themoviedbapi.AbstractTmdbApi.mapJsonResult(AbstractTmdbApi.java:40)
at info.movito.themoviedbapi.TmdbConfig.getConfig(TmdbConfig.java:18)
at info.movito.themoviedbapi.TmdbApi.<init>(TmdbApi.java:54)
at info.movito.themoviedbapi.TmdbApi.<init>(TmdbApi.java:44)
at com.example.demo.DemoApplication.main(DemoApplication.java:10)

这其实是一件好事。这意味着演示代码正在运行,但需要使用API密钥进行配置才能正常运行。