本地Maven构建Java项目遇SnappyError问题求助
解决Snappy-Java在Java 17下的UNSUPPORTED_PLATFORM错误
核心原因
Java 16及以上版本移除了java.nio.Buffer中address字段的直接访问权限,而旧版snappy-java的纯Java实现依赖该字段;同时你的项目存在依赖冲突:pom.xml声明的是1.1.8.4,但实际运行时加载的是1.1.7.3,旧版本未适配Java 17。
有效解决步骤
1. 彻底修复依赖冲突
在pom.xml中锁定snappy-java版本,并排除其他依赖引入的旧版本:
<dependencyManagement> <dependencies> <!-- 锁定适配Java 17的snappy-java版本 --> <dependency> <groupId>org.xerial.snappy</groupId> <artifactId>snappy-java</artifactId> <version>1.1.9.1</version> </dependency> </dependencies> </dependencyManagement> <!-- 项目依赖中明确引入并排除旧版本 --> <dependencies> <dependency> <groupId>org.xerial.snappy</groupId> <artifactId>snappy-java</artifactId> <exclusions> <exclusion> <groupId>org.xerial.snappy</groupId> <artifactId>snappy-java</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
执行Maven命令清理并重新构建:
mvn clean install -U
2. 升级到适配Java 17的版本
优先使用1.1.9.1及以上版本,这些版本专门修复了Java 16+下的UNSUPPORTED_PLATFORM错误,无需额外JVM参数。
3. 临时应急方案(不推荐长期使用)
如果暂时无法升级版本,可在Maven构建或项目启动时添加JVM参数,允许访问内部API:
# Maven构建时添加参数 mvn clean install -Dmaven.compiler.args="--add-opens java.base/java.nio=ALL-UNNAMED" # 项目启动时添加参数 java --add-opens java.base/java.nio=ALL-UNNAMED -jar your-project.jar
内容的提问来源于stack exchange,提问作者Baiskey
相关产品推荐
相关产品推荐

