最近,在研究Dubbo的源代码,于是从Git上下载了最新master分支的源代码,打开IDEA导入以后,出现了无法编译的情况。提示缺少io.grpc:grpc-api:1.31.1依赖,这种依赖下载不下来可能和中央仓库的网络访问有关,我们就只能自己去下载,并放到自己的本地仓库,地址:
https://repo1.maven.org/maven2/io/grpc/grpc-api/1.31.1/
把这个路径下的3个jar包和1个pom文件下载回来,并存放到自己的本地仓库,路径参考中央仓库路径。存放好以后,重新到IDEA当中Maven Reimport一下。
这时,dubbo-serialization-protobuf 子模块下面的 dubbo-serialization/dubbo-serialization-protobuf/src/main/java/org/apache/dubbo/common/serialize/protobuf/support 路径下的类全部报错,提示找不到wrapper路径下的所有类,
import org.apache.dubbo.common.serialize.protobuf.support.wrapper.MapValue;
import org.apache.dubbo.common.serialize.protobuf.support.wrapper.ThrowablePB;
在源代码当中找了半天没找到MapValue和ThrowablePB这2个类,于是搜了一下,发现这2个类是由dubbo源代码动态生成了,路径生成在
dubbo-serialization/dubbo-serialization-protobuf/build/generated/source/proto/main/java/org/apache/dubbo/common/serialize/protobuf/support/wrapper/ThrowablePB.java
dubbo-serialization/dubbo-serialization-protobuf/build/generated/source/proto/main/java/org/apache/dubbo/common/serialize/protobuf/support/wrapper/MapValue.java
看路径是在build/generated/… 下面,这样的话,我们就需要在IDEA里面指定该路径下的java文件为源代码目录,才能让IDEA识别为该目录是源代码目录。那么这就好办了,选中“dubbo-serialization-protobuf”子模块,按F4进入“模块”,将该目录设置为“源”,并保存即可。
此时,应该就可以成功进行编译和构建了。