泛型在實際的工作中應用非常廣泛,關于泛型就不在這里贅述了,感興趣請戳[《重新認識泛型》](http://blog.csdn.net/liushuijinger/article/details/40488127)。項目中用到了如下的泛型:
~~~
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] ------------------------------------------------------------------------
~~~