在使用dubbo-2.6.0.jar时,自己的代码服务(入参使用是泛型)依赖于dubbo,对外是dubbo接口,客户端使用的是dubbo-2.8.4
出现的情况是:
在cmd中使用invoke命令出现No Such Method...情况,但是使用客户端(dubbo-2.8.4.jar)代码调用时是正常的。就是不支持invoke
dubbo-2.6.0.jar源码中
解决方法:将dubbo-2.6.0中的findMethod替换成2.5.3的方法,再重新编译打包
将findMethod方法替换成
private static Method findMethod(Exporter<?> exporter, String method, List<Object> args) {
Invoker<?> invoker = exporter.getInvoker();
Method[] methods = invoker.getInterface().getMethods();
Method invokeMethod = null;
Method[] arr$ = methods;
int len$ = methods.length;
for(int i$ = 0; i$ < len$; ++i$) {
Method m = arr$[i$];
if (m.getName().equals(method) && m.getParameterTypes().length == args.size()) {
if (invokeMethod != null) {
if (isMatch(invokeMethod.getParameterTypes(), args)) {
invokeMethod = m;
break;
}
} else {
invokeMethod = m;
}
invoker = exporter.getInvoker();
}
}
return invokeMethod;
}
cmd到根目录进行打包,mvn clean package -Dmaven.test.skip=true
然后放入到项目中使用就会解决invoke不支持泛型的情况
注:如果要将整个dubbo项目发布新版本到自己的指定私服
例:1.将dubbo中的所有项目中的pom文件的版本2.6.0改为2.6.0.1
注:查看dubbo和dubbo-maven的pom.xml中有没有
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
如果没有则添加
2.如果公司有自己的私服地址,则将私服地址添加到dubbo和dubbo-maven的pom.xml中
<repositories>
<repository>
<id>public</id>
<name>Maven Public</name>
<url>*</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<uniqueVersion>true</uniqueVersion>
<id>*</id>
<name>*</name>
<url>*</url>
</repository>
<snapshotRepository>
<uniqueVersion>false</uniqueVersion>
<id>*</id>
<name>*</name>
<url>*</url>
</snapshotRepository>
</distributionManagement>
4.dubbo-parent的pom.xml中也要配置指定发布的私服,如果不需要发布,就需要这个步骤
5.cmd到项目目录
6.执行mvn clean -Dmaven.test.skip=true
7.执行mvn package -Dmaven.test.skip=true
8.执行mvn install -Dmaven.test.skip=true
9.执行mvn deploy -Dmaven.test.skip=true
至此就发布到自己指定的私服了