(八) Maven编译错误:不兼容的类型的解决方案

最后更新于:2022-04-01 20:10:06

泛型在实际的工作中应用非常广泛,关于泛型就不在这里赘述了,感兴趣请戳[《重新认识泛型》](http://blog.csdn.net/liushuijinger/article/details/40488127)。项目中用到了如下的泛型: ~~~ public T query(String sql, ResultSetHandler 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的配置: ~~~ ... ... org.apache.maven.plugins maven-compiler-plugin 3.1 ${java.version} ${java.version} eclipse org.codehaus.plexus plexus-compiler-eclipse 2.2 .... ... ~~~ 保存,用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] ------------------------------------------------------------------------ ~~~
';