dubbo2.5.5-dubbo2.6.0版本不支持泛型的解决方法

23 篇文章 0 订阅
3 篇文章 0 订阅

在使用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

至此就发布到自己指定的私服了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值