Maven编译jar出现:无法确定 T 的类型参数的异常的原因和处理方案
出错场景:
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class JsonUtil { private static final Gson gson = new GsonBuilder().setDateFormat( "yyyy-MM-dd HH:mm:ss" ).create(); public static String toJson(Object obj) { return gson.toJson(obj); } public static <T> T fromJson(String json, Class<T> classOfT) { return gson.fromJson(json, classOfT); } @SuppressWarnings ( "unchecked" ) public static <T> T fromJson(String json, Type typeOfT) { return gson.fromJson(json, typeOfT); } } |
在本地eclipse下编译是没有任何问题。
maven编译配置:
1 2 3 4 5 6 7 8 9 10 | <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version> 2.3 </version> <configuration> <source> 1.6 </source> <target> 1.6 </target> <encoding>UTF- 8 </encoding> </configuration> </plugin> |
异常信息:
1 2 3 4 5 6 7 8 9 | [ERROR] [ERROR] /opt/web/iwork_shell/release_jar_workspace/831881fe-9cbe- 4444 -99d9-5667fcb96263/workspace/src/main/java/com/bj58/biz/utility/JsonUtil.java:[ 26 , 22 ] 无法确定 T 的类型参数;对于上限为 T,java.lang.Object 的类型变量 T,不存在唯一最大实例 [ERROR] -> [Help 1 ] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch . [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1 ] http: //cwiki.apache.org/confluence/display/MAVEN/MojoFailureException |
1 | 英文错误信息: |
1 2 3 | incompatible types; found: ........... required:........... |
问题原因:
用Maven编译,jdk版本已经指定为1.6版,在本地mavan编译打包也一切正常。在maven打包服务器上打包就会出以上的异常信息。发现打包服务器上的jdk版本是jdk1.6.0_16版本,经过查找相关资料确认,该问题是jdk1.6.0_16版本一个bug导致的,这是一个确认的错误:错误号:6468354,具体错误原因可以查看:https://bugs.openjdk.java.net/browse/JDK-6468354
解决办法:
1. 在返回的地方加强制类型转换,可以临时绕过该问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class JsonUtil { private static final Gson gson = new GsonBuilder().setDateFormat( "yyyy-MM-dd HH:mm:ss" ).create(); public static String toJson(Object obj) { return gson.toJson(obj); } public static <T> T fromJson(String json, Class<T> classOfT) { return (T)gson.fromJson(json, classOfT); } @SuppressWarnings ( "unchecked" ) public static <T> T fromJson(String json, Type typeOfT) { return (T)gson.fromJson(json, typeOfT); } } |
2. 升级jdk版本到1.6的最新版本,比如我们升级到jdk1.6.0_38版本后,测试打包就没有问题。根据网上资料,该bug在jdk1.6.0_25版本已经解决(没有亲测吆)
关注 熵减黑客 ,一起学习成长

分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
2013-01-12 为什么程序员的价值总是被严重的低估?