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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM