栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

maven优雅的替换依赖中的类

maven优雅的替换依赖中的类

背景

在项目中会依赖到其他第三方的jar包,有时我们需要扩展第三方jar的功能,或者修复依赖中已知还未修复的bug,要改其中的代码,最直接的做法可能会想到,通过修改jar的源码,然后重新编译新的jar,但是, 这样随之会带来代码不易维护的问题(只改动几个类,但是需要维护jar中所有的代码,有时不知道改了哪些代码)。下面,我们通过maven插件,将修改的类代码类,替换jar中的类。

实现jar中的类替(maven插件) maven-dependency-plugin

插件说明:

依赖项插件提供了操作工件的功能。它可以将项目从本地或远程存储库复制和/或解压缩到指定位置。官方地址

使用命令:

从存储库中检索项目列表并将其解压缩到定义位置的目标。

 dependency:unpack

操作原理

这个命令可以将我们指定的dependency解压到class目录中,然后设置不覆盖本地项目相同class文件(类的全限定名相同),就达到了本地文件替换源jar中class文件的目的。

实践

我们的目将org.apache.flink:flink-kubernetes_2.11:1.14.3中的KubernetesClusterClientFactory类,将createClusterDescriptor方法第一行输出日志。

代码片段

package org.apache.flink.kubernetes;

...

@Internal
public class KubernetesClusterClientFactory
        extends AbstractContainerizedClusterClientFactory {
...

    @Override
    public KubernetesClusterDescriptor createClusterDescriptor(Configuration configuration) {
        //新添加代码
        System.out.println("configuration : "+ configuration)
        //=======
        checkNotNull(configuration);
        if (!configuration.contains(KubernetesConfigOptions.CLUSTER_ID)) {
            final String clusterId = generateClusterId();
            configuration.setString(KubernetesConfigOptions.CLUSTER_ID, clusterId);
        }
        return new KubernetesClusterDescriptor(
                configuration,
                FlinkKubeClientFactory.getInstance().fromConfiguration(configuration, "client"));
    }

...

maven pom.xml片段

  
        
            org.apache.flink
            flink-kubernetes_${scala.binary.version}
            ${flink.version}
        


    
        
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        unpack
                        generate-sources
                        
                            unpack
                        
                        
                            
                                
                                    org.apache.flink
                                    flink-kubernetes_${scala.binary.version}
                                    false
                                    ${project.build.directory}/classes
                                
                            
                        
                    
                
            
        
    

通过maven打包命令打包

mvm clean install ,

从class目录中查看KubernetesClusterClientFactory,发现代码已经是我们修改后的类。同时,当前项目编译的jar包,类也已经被替换成我们自定义的类

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/774797.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号