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

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