Maven编译jar出现:无法确定 T 的类型参数的异常的原因和处理方案

异常信息

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project fcapm: Compilation failure: Compilation failure:
[ERROR] /C:/J2EE/workspace/fcapm/src/main/java/com/baidu/fcapm/environment/impl/GeneralMyTasksDaoImpl.java:[98,57] C:\J2EE\workspace\fcapm\src\main\java\com\baidu\fcapm\environment\dao\impl\GeneralMyTasksDaoImpl.java:98: 不兼容的类型
[ERROR] 找到: java.lang.Object
[ERROR] 需要: com.baidu.fcapm.environment.bo.GeneralDeploymentLog
[ERROR] /C:/J2EE/workspace/fcapm/src/main/java/com/baidu/fcapm/environment/impl/GeneralInformationDaoImpl.java:[58,44] C:\J2EE\workspace\fcapm\src\main\java\com\baidu\fcapm\environment\dao\impl\GeneralInformationDaoImpl.java:58: 不兼容的类型
[ERROR] 找到: java.lang.Object
[ERROR] 需要: com.baidu.fcapm.environment.bo.GeneralInformation
[ERROR] -> [Help 1]

出错场景:

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编译配置:

<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>

问题原因:

  用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. 在返回的地方加强制类型转换,可以临时绕过该问题

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版本已经解决


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值