Maven编译报错:找不到jackson2.JacksonFactory符号(Google Sheets API场景)
解决Maven编译Google Sheets API时
cannot find symbol jackson2.JacksonFactory错误 嘿,我来帮你搞定这个编译报错的问题!你遇到的cannot find symbol jackson2.JacksonFactory错误,本质是Maven依赖里缺了Jackson 2.x的相关支持库,下面一步步给你解决:
问题回顾
你尝试通过Maven集成Google Sheets API,但编译时触发了找不到JacksonFactory类的错误,先把你的项目信息整理清楚:
你的pom.xml配置
<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>BotSheets</groupId> <artifactId>b</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>b</name> <url>http://maven.apache.org</url> <build> <plugins> <plugin> <!-- Build an executable JAR --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>BotSheets.b.GoogleSheetAPI</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit-dep</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>com.google.api-client</groupId> <artifactId>google-api-client</artifactId> <version>1.22.0</version> </dependency> <dependency> <groupId>com.google.oauth-client</groupId> <artifactId>google-oauth-client-jetty</artifactId> <version>1.22.0</version> </dependency> <dependency> <groupId>com.google.apis</groupId> <artifactId>google-api-services-sheets</artifactId> <version>v4-rev483-1.22.0</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.10</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.4.0</version> </dependency> </dependencies>
项目目录结构
├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── BotSheets │ │ │ └── b │ │ │ ├── client_secret.json │ │ │ └── GoogleSheetAPI.java │ └── test │ ├── java │ │ └── BotSheets │ │ └── b │ │ └── AppTest.java
核心代码片段
package BotSheets.b; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Arrays; import java.util.List; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.sheets.v4.Sheets; import com.google.api.services.sheets.v4.SheetsScopes; import com.google.api.services.sheets.v4.model.ValueRange; public class GoogleSheetAPI { /** Application name. */ private static final String APPLICATION_NAME = "Google Sheets API Java Quickstart"; /** Directory to store user credentials for this application. */ private static final java.io.File DATA_STORE_DIR = new java.io.File( System.getProperty("user.home"), ".credentials/sheets.googleapis.com-java-quickstart"); /** Global instance of the {@link FileDataStoreFactory}. */ private static FileDataStoreFactory DATA_STORE_FACTORY; /** Global instance of the JSON factory. */ private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); /** Global instance of the HTTP transport. */ private static HttpTransport HTTP_TRANSPORT; /** Global instance of the scopes required by this quickstart. * * If modifying these scopes, delete your previously saved credentials * at ~/.credentials/sheets.googleapis.com-java-quickstart */ private static final List<String> SCOPES = Arrays.asList(SheetsScopes.SPREADSHEETS_READONLY); static { try { HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); } catch (Throwable t) { t.printStackTrace(); System.exit(1); } } // 剩余代码省略 }
具体解决步骤
1. 添加缺失的Jackson2依赖
JacksonFactory类并不在基础的google-api-client包里,而是属于google-api-client-jackson2模块。你需要在pom.xml的<dependencies>块中加入这个依赖:
<dependency> <groupId>com.google.api-client</groupId> <artifactId>google-api-client-jackson2</artifactId> <version>1.22.0</version> </dependency>
注意版本要和你现有的google-api-client版本保持一致(这里是1.22.0),避免版本冲突。
2. 重新编译项目
添加依赖后,执行Maven的清理编译命令:
mvn clean compile
这样应该就能顺利找到JacksonFactory类了。
额外小贴士
- 版本统一:所有Google相关的依赖尽量保持相同版本,不然很容易出现奇怪的兼容性问题。
- 清理缓存:如果还是有依赖问题,可以试试强制更新Maven依赖:
mvn clean install -U
- 检查导入:确认代码里的
import com.google.api.client.json.jackson2.JacksonFactory;没有拼写错误,比如少打了字母之类的。
内容的提问来源于stack exchange,提问作者yeo4
相关产品推荐
相关产品推荐

