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

出错场景:

  代码:

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>

  异常信息:

[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 
英文错误信息:
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. 在返回的地方加强制类型转换,可以临时绕过该问题

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版本已经解决(没有亲测吆)

  

时间: 2024-08-22 10:53:39

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

使用Maven 编译 storm 源码可能碰到下载依赖jar 的问题

网上很多文件使用 lein 编译 storm 源码,但是我下载的版本 apache-storm-0.9.2-incubating 中没有lein 工程文件,而是有 pom.xml,可以使用maven 编译. 在storm 工程的最上层目录执行: mvn package -DskipTests=true 可能会碰到错误如下描述(jackson-core-2.0.6 只是一个例子): Failed to execute goal org.apache.maven.plugins:maven-remo

Spark-1.0.1 的make-distribution.sh编译、SBT编译、Maven编译 三种编译方法

本文编译方法所支持的hadoop环境是Hadoop-2.2.0,YARN是2.2.0,JAVA版本为1.8.0_11,操作系统Ubuntu14.04 Spark1.0.0 源码下载地址: http://mirror.bit.edu.cn/apache/spark/spark-1.0.0/spark-1.0.0.tgz Spark1.0.1 源码下载地址:http://apache.fayea.com/apache-mirror/spark/spark-1.0.1/spark-1.0.1.tgz

[转]maven编译时出现读取XXX时出错invalid LOC header (bad signature)

maven编译时出现读取XXX时出错invalid LOC header (bad signature) 一.发现问题右击pom.xml,run as —> maven install,会看到console中有时报mavenRepository\repos\org\mortbay\jetty\servlet-api-2.5\6.1H.14.1\servlet-api-2.5-6.1H.14.1.jar时出错等某些包的报错等类似信息,pom.xml显示红叉. 二.原因分析该包没有下载正确. 三.解

Android实战技巧之二十七:Maven编译开源二维码扫描项目zxing

拥有自己的手机软件工具箱是件非常有意义的事情.就目前国内Android的生态环境来说,混乱的不能再乱了.由于我们登录不了官网App商店,下软件就只好在国内五花八门的软件市场下载.由于这些市场的监管不力,什么样的软件都有,就拿二维码扫描软件来说,好多都带那种狗皮膏药一样的广告插件,真是特别讨厌. 在开源世界中有很多优秀的软件,其中zxing就是非常好的Android扫碼工具软件.我们可以拿来即用还可以学习内部机制,然后做些定制化个性化.既可以自己享用,又可以跟大家分享.真是不错. zxing在gi

maven添加jar包依赖

maven的东西使用了一段时间,但是每次使用都多少有点含糊,所以总结一下. 目前主要使用是在jar包的控制上 原理: 在本地,指定一个文件夹,便是maven的仓库,maven会从远程的中央仓库中下载你需要的jar资源到你本地,然后通过maven关联,讲jar包依赖到你的项目中,避免了你需要将jar包拷贝到lib中,并通过classpath引入这些jar包的工作. 使用优点: 方便添加项目依赖的jar包,比如,你需要使用spring-mvc,那么,你必须引入spring-mvc及其相关的所有jar

4、Jenkins持续集成之maven编译

4.Jenkins持续集成之maven编译.md 简介     Jenkins是一个开源的持续集成工具,应用Jenkins搭建持续集成环境,可以进行自动构建.自动编译和部署,非常方便.在服务器比较少的情况下,Jenkins的优势并不明显,但是随着项目发展,服务器数量的增加,Jenkins的优势就会凸显出来,可以很好的提高效率,减少很多人工操作.现在公司的开发都是使用Git管理代码,Maven管理多模块和项目依赖.Jenkins支持两种工程:FreeStyle工程和Maven工程.如果代码是用Ma

maven编译问题:maven编译成功,eclipse文件未编译

我们先来看一个正常的编译流程: 1.从svn上检出一个项目: 2.看该工程是否为maven项目,不是则转为maven项目:右键单击项目,选择configure->Convert to Maven project 3.用maven编译该项目:右键单击项目,选择Run As->Maven install 以上流程做完,maven打包成功,那么恭喜你,你检出的项目已经可以发布,代码已经编译.但我遇到的问题是,执行Maven install没问题,编译动作也执行了,到输出目录target\classe

eclipse编译项目用maven编译问题

1.eclipse只是个ide开发环境,并没有编译器功能.没有编译器.eclipse编译项目只是调jdk本地的java编译器.maven是单独编译,eclipse可以调用maven编译, 在eclipse中用maven编译的方法: 在项目中的“pom.xml”文件上点击右键,在弹出的菜单中选择“Run AS”à“Maveninstall”来编译和生成项目.如下图所示: 在编译和生成过程中,可以在“Console”面板中可以看到Maven编译过程的信息,如果编译和生成成功,可以在“Console”

maven生成jar包

改了部分cas源码,想重新生成jar包,只好试着脱离eclipse,学了一下maven打jar包的命令,记录如下: 1.首先下载maven (请注意自己的jdk版本,如果使用maven2建议使用jdk1.5,如果maven3建议使用jdk1.7,该建议不能保证准确,仅是个人结合当前开发环境实践的结果) 2.其次配置maven的bin目录到环境变量的path下 3.然后在cmd下进入要编译的项目目录(pom文件所在目录) 4.执行mvn clean (此前注意配置好"JAVA_HOME"