菜鳥調錯(八)—— Maven編譯錯誤:不相容的型別的解決方案

劉水鏡發表於2015-03-31

泛型在實際的工作中應用非常廣泛,關於泛型就不在這裡贅述了,感興趣請戳《重新認識泛型》。專案中用到了如下的泛型:

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

 



相關文章