1. 程式人生 > >MAVEN 編譯打包時報“.....找不到符號” 的處理方法總結

MAVEN 編譯打包時報“.....找不到符號” 的處理方法總結

這個錯都是在MAVEN外掛在編譯的時候報的,所以問題一定是出在編譯的環節上。

這個時候就要好好檢查MAVEN的編譯配置,

1、看看配置裡的編譯版本和本機環境上配置的java版本是否一致,有時候報錯的類有可能是引用了另外另外一個MAVEN模組的程式碼,也要看看那個模組的版本配置編碼是否一致。但這並不是一定的,有時候不一致也不會有問題,但這是一個可以注意的點。

例如下圖情況:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId
>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </
configuration> </plugin>

2、如果報錯的類裡面有引用了另外一個MAVEN模組的程式碼,那麼在打這個模組的包之前,最好先編譯打包一下那個要引用的MAVEN模組。

3、還有可能是編譯外掛版本的問題,例如剛剛上面的MAVEN外掛配置,在出問題的時候可以嘗試把版本調低或者調高,然後再編譯試試。

4、還要看看編譯外掛裡面是否還有引用了其它的外掛,例如下面情況所示:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <
artifactId>maven-compiler-plugin</artifactId> <configuration> <annotationProcessorPaths> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${mapstruct.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin>

這裡的編譯外掛還引用了mapstruct依賴,所以要檢查一下這個引用的依賴版本是否有問題,可以嘗試更換其它版本。

最近我遇到的一個問題就是出在這裡。我的工程裡面有一個DTO類,然後在另外一個impl類裡面會呼叫這個DTO類某個屬性的set方法,就是在編譯這個impl類的時候,報了找不到符號,報錯的位置就是這個set方法的位置。後來試了好多方法都不行,最後發現原來這是mapstruct的一個bug,如果我這個DTO類的getter和setter方法的順序與屬性的順序不一致的話,就會編譯失敗。例如類裡面的屬性先是name,下一行就是age,再下一行就是habbit,那麼getter,setter方法也要按這個順序,先是name的getter,setter方法,然後再是age的getter,setter方法,等等。我就是有個組getter,setter方法順序不對,所以編譯出錯了。這真的是非常坑。

所以用這些開源的外掛,儘量用穩定版本,不然怎得非常坑。

5、簡單粗暴地使用“Maven Update Project”,這個方法能解決大部分情況下的這個問題。

以上就是最近的總結了,如有不當之處,歡迎指出。

轉載請標明出處:http://www.cnblogs.com/Starshot/p/7441075.html