今天在编译项目时出现了找不到符号的错误,在网上找了很久发现解答都大同小异。
最后发现是由于多module工程,每个module维护一个pom,最好保持所有子pom的parent version保持与主pom version一致。否则可能会出现找不到包和找不到符号的情况。
分析发现应该是git协同中,pull了别人的提交,在merge时,子pom的parent version更新,而主pom的version不小心没有更新。那么在编译的时候会以别人提交的项目代码作为依赖,从而会造成你本地的代码找不到你本地其他子项目代码的情况,造成报错。
也就是说被依赖方的版本要低于依赖方的版本。
比如说springcloud中,client模块使用了common模块中的UserDTO类,common模块的pom版本为
<parent>
<groupId>XXXXXX</groupId>
<artifactId>XXXXXX</artifactId>
<version>1.4.80</version>
</parent>
client模块的pom版本为
<parent>
<groupId>XXXXXX</groupId>
<artifactId>XXXXXX</artifactId>
<version>1.4.75</version>
</parent>
<dependencies>
<dependency>
<groupId>XXXXXX</groupId>
<artifactId>common</artifactId>
</dependency>
</dependencies>
若1.4.80之前的common模块中不存在UserDTO类,且client模块中的common依赖未指定版本,那么client会去加载1.4.75版本的common包,导致编译的时候UserDTO类不存在。
解决办法就是保持子项目version和主项目version一致或者指定好相互依赖的版本关系。