菜鸟调错(八)—— Maven编译错误:不兼容的类型的解决方式

摘要:
泛型在实际工作中被广泛使用。这里我将不详细介绍泛型。如果您感兴趣,请单击再次了解泛型。例如,项目中使用了以下泛型:public<T>Tquery(Stringsql,ResultSetHandler<T>rsh)throwsSQLException{returnthis.query(sql,rsh,(Object[])null);}以上代码可以编译为

泛型在实际的工作中应用很广泛,关于泛型就不在这里赘述了。感兴趣请戳《又一次认识泛型》。项目中用到了例如以下的泛型:

    public <T> T query(String sql, ResultSetHandler<T> rsh) throws SQLException {
        return this.query(sql, rsh, (Object[]) null);
    }

以上代码在Eclipse中能够编译通过并成功执行,可是当你使用Maven编译的时候就会报错,错误信息例如以下:

xxx不兼容的类型
须要:xxx
找到:    java.lang.Object

Eclipse编译代码时。使用的是自带的JDT(Java Development Tools),而Maven默认使用的是JAVA_HONE中的javac,而javac相对JDT的检查机制来说。更加的严格,所以导致Eclipse能够编译通过。而用Maven编译会报错的结果。


解决方式有两个:


第一个,借助Eclipse的JDT编译

点击 Eclipse –> Project –> Clean…  使用JDT将源码编译到target目录下,然后直接使用mvn package 打包就可以(不要加clean)。


第二个。在pom.xml文件里为Maven指定用JDT来编译(推荐)

改动pom.xml文件里maven-compiler-plugin的配置:

<build>
		...
	<plugins>
			...
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.1</version>
			<configuration>
				<source>${java.version}</source>
				<target>${java.version}</target>
				<compilerId>eclipse</compilerId>
			</configuration>
			<dependencies>
				<dependency>
					<groupId>org.codehaus.plexus</groupId>
					<artifactId>plexus-compiler-eclipse</artifactId>
					<version>2.2</version>
				</dependency>
			</dependencies>
		</plugin>
		....
	</plugins>
	...
</build>

保存,用Maven编译,顺利通过,你又看到了熟悉的提示信息:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.716 s
[INFO] Finished at: 2015-03-31T12:35:12+09:00
[INFO] Final Memory: 18M/219M
[INFO] ------------------------------------------------------------------------



免责声明:文章转载自《菜鸟调错(八)—— Maven编译错误:不兼容的类型的解决方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Gitlab安装和使用C# 以管理员身份运行程序下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VB.NET中LINQ TO List泛型查询语句(分组,聚合函数)

Public Class LinqToList 'LINQ在C#中使用比较方便,但是在VB中使用比较麻烦,复杂,和C#用法并不太一样 Dim listNew As List(Of Product) = New List(Of Product) '新商品 Dim listOld As List(Of Product) = New L...

泛型类型参数

在泛型类型或泛型方法的定义中,类型参数是一个占位符(placeholder),通常为一个大写字母,如T。在客户代码声明、实例化该类型的变量时,把T替换为客户代码所指定的数据类型。泛型类,如泛型概述中给出的MyList<T>类,不能用作as-is,原因在于它不是一个真正的类型,而更像是一个类型的蓝图。要使用MyList<T>,客户代码...

奇技淫巧:F#泛型特化的最终优化

上回讲到,F#中module里的泛型变量实际上是泛型函数。由此,在一个泛型特化的实现中出了岔子。最后通过泛型得以解决。使用 F# 来做泛型特化,相比 C# 有这个优势:F# 中直接支持函数赋值,而无须使用委托。避免了 C# 例子里面,为了节省 Lumbda 与委托之间的转换,而做出的丑陋的反射、拆箱操作。代码不再这么艰涩,我们重新来看看这段代码: modu...

泛型(generic)的基本使用

package com.day15.generic;/* * 泛型的好处: * 1.提高安全性(将运行期的错误转换到编译期) * 2.省去强转的麻烦 * 泛型的使用: * <>中放的必须是引用数据类型 * 泛型最好不要定义成Object类型,因为没有意义 */ import java.util.ArrayList;import java.uti...

google Guava包的reflection(反射)解析

译者:万天慧(武祖) 由于类型擦除,你不能够在运行时传递泛型类对象——你可能想强制转换它们,并假装这些对象是有泛型的,但实际上它们没有。 举个例子: ArrayList<String> stringList = Lists.newArrayList(); ArrayList<Integer> intList = Lists.newA...

如何正确使用Java泛型

前言 Java 1.5之前是没有泛型的,以前从集合中读取每个对象都必须先进行转换,如果不小心存入集合中对象类型是错的,运行过程中转换处理会报错。有了泛型之后编译器会自动帮助转换,使程序更加安全,但是要正确使用泛型才能取得事半功倍的效果。 本文主要从不要使用原生类型,泛型方法,限制通配符,类型安全的异构容器四个部分来说明如何正确使用Java泛型。主要参考资...