百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

程序员你的maven多模块项目如何对外输出为一个构件?

ztj100 2025-02-20 18:55 12 浏览 0 评论

上图为常见的台式机,程序员,你看了有啥启发?

台式机生产线我的maven代码工程 xxx
显示器xxx-web
主机xxx-app
键盘xxx-domian
鼠标xxx-infrastration
台式机xxx-all.jar

虽然不能完全对应的上,我拿开源的dubbo描述一下我的问题。

dubbo开发者:dubbo的开源项目采用maven多模块开发的,内部模块分的非常细。

充分利用了台式电脑的分模块设计思想。

dubbo使用者:我只需要引入一个dubbo-all的依赖即可使用dubbo;

好比台式机的用户,我只需要一个可使用的台式机,按照使用手册来即可,内部的东西我不想知道;

只需要引入坐标:

 
      com.alibaba
      dubbo
           2.7.0
      true
    

背景

最近的业务开发工作碰到过一个类似的问题。

问题回答
where are we?现状公共组件程序员开发采用多模块开发一个组件,业务程序员希望只引用一个组件
where are we go?目的多模块开发一个公共组件,业务项目只需要引入一个模块
how we go there?实现路径maven-shade-plugin

实现路径

shade

shade提供了一个把你的maven多模块构件和构件的依赖打包为一个超级jar包的能力。

它绑定到了maven生命周期的package阶段,提供了唯一的mavn的goal指令shade:shade

它的系统运行环境要求是:

运行需求说明
maven3最低maven3
jdk7最低jdk7
内存和磁盘无最低空间需求

用法如下:


 
  
  
   
    
     org.apache.maven.plugins
     maven-shade-plugin
     3.2.4
    
   
  
  
  
   
    org.apache.maven.plugins
    maven-shade-plugin
    3.2.4
     
    
    
     
      package
      
       shade
      
     
    
   
  
 

常见配置属性:

ApacheLicenseResourceTransformer

防止证书重复

ApacheNoticeResourceTransformer

准备合并通知

AppendingTransformer

作为资源添加

ComponentsXmlResourceTransformer

聚合components.xml 从

DontIncludeResourceTransformer

排除资源文件

IncludeResourceTransformer

包含的资源文件

ManifestResourceTransformer

manifest的条目

ServicesResourceTransformer

合并meta-info/services 资源

XmlAppendingTransformer

添加xml内容作为一个xml资源

dubbo

主要看dubbo-all模块的配置:


    4.0.0
    
        org.apache.dubbo
        dubbo-parent
        ${revision}
        ../pom.xml
    
    dubbo
    jar
    dubbo-all
    The all in one project of dubbo
    
        
            org.apache.dubbo
            dubbo-config-api
            ${project.version}
            compile
            true
        
    
    
        
            
                org.apache.maven.plugins
                maven-shade-plugin
                
                    
                        package
                        
                            shade
                        
                        
                            true
                            false
                            
                                
                                    com.alibaba:hessian-lite
                                                                        org.apache.dubbo:dubbo-config-api
                                
                            
                            
                                
                                
                                    
                                        META-INF/dubbo/internal/org.apache.dubbo.common.compiler.Compiler
                                    
                                
                                
                                    
                                        META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory
                                    
                                
                            
                            
                                
                                    org.apache.dubbo:dubbo
                                    
                                        
                                        com/**
                                        org/**
                                        
                                        META-INF/dubbo/**
                                    
                                
                            
                        
                    
                
            
        
    

为控制代码占用太多内容,上面贴的pom配置为删除了大量相同或者类似的节点。下面拆解一下它的结构:

核心节点说明
dependency直接依赖,即包含的当前工程中的模块
pluginshade

shade的核心配置

配置说明(见名知意,先猜测)
phase挂接在maven的生命周期的package阶段
goal提供唯一的goal指令 shade
createSourcesJar是否创建源码到jar包中,方便ide直接查看到源码
promoteTransitiveDependencies是否打包间接依赖
artifactSet-includes-include包含的子模块或者排除的子模块
transformers-transformer-resource转换器配置
excludes>-filter过滤器中排出某些文件

具体看上面的代码。

实际项目

参考dubbo,也是添加shade插件,目的是只把多模块的class和resource统一到一个jar中统一使用。

公司保密原因,不贴出来了。

小结

如果看完之后你只能记住一句话:

maven多模块开发可以使用shade插件对使用方输出一个构件

我会持续分享Java软件编程知识和程序员发展职业之路!原创不易,关注诚可贵,转发价更高!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。

相关推荐

Vue3非兼容变更——函数式组件(vue 兼容)

在Vue2.X中,函数式组件有两个主要应用场景:作为性能优化,因为它们的初始化速度比有状态组件快得多;返回多个根节点。然而在Vue3.X中,有状态组件的性能已经提高到可以忽略不计的程度。此外,有状态组...

利用vue.js进行组件化开发,一学就会(一)

组件原理/组成组件(Component)扩展HTML元素,封装可重用的代码,核心目标是为了可重用性高,减少重复性的开发。组件预先定义好行为的ViewModel类。代码按照template\styl...

Vue3 新趋势:10 个最强 X 操作!(vue.3)

Vue3为前端开发带来了诸多革新,它不仅提升了性能,还提供了...

总结 Vue3 组件管理 12 种高级写法,灵活使用才能提高效率

SFC单文件组件顾名思义,就是一个.vue文件只写一个组件...

前端流行框架Vue3教程:17. _组件数据传递

_组件数据传递我们之前讲解过了组件之间的数据传递,...

前端流行框架Vue3教程:14. 组件传递Props效验

组件传递Props效验Vue组件可以更细致地声明对传入的props的校验要求...

前端流行框架Vue3教程:25. 组件保持存活

25.组件保持存活当使用...

5 个被低估的 Vue3 实战技巧,让你的项目性能提升 300%?

前端圈最近都在卷性能优化和工程化,你还在用老一套的Vue3开发方法?作为摸爬滚打多年的老前端,今天就把私藏的几个Vue3实战技巧分享出来,帮你在开发效率、代码质量和项目性能上实现弯道超车!一、...

绝望!Vue3 组件频繁崩溃?7 个硬核技巧让性能暴涨 400%!

前端的兄弟姐妹们五一假期快乐,谁还没在Vue3项目上栽过跟头?满心欢喜写好的组件,一到实际场景就频频崩溃,页面加载慢得像蜗牛,操作卡顿到让人想砸电脑。用户疯狂吐槽,领导脸色难看,自己改代码改到怀疑...

前端流行框架Vue3教程:15. 组件事件

组件事件在组件的模板表达式中,可以直接使用...

Vue3,看这篇就够了(vue3 从入门到实战)

一、前言最近很多技术网站,讨论的最多的无非就是Vue3了,大多数都是CompositionAPI和基于Proxy的原理分析。但是今天想着跟大家聊聊,Vue3对于一个低代码平台的前端更深层次意味着什么...

前端流行框架Vue3教程:24.动态组件

24.动态组件有些场景会需要在两个组件间来回切换,比如Tab界面...

前端流行框架Vue3教程:12. 组件的注册方式

组件的注册方式一个Vue组件在使用前需要先被“注册”,这样Vue才能在渲染模板时找到其对应的实现。组件注册有两种方式:全局注册和局部注册...

焦虑!Vue3 组件频繁假死?6 个奇招让页面流畅度狂飙 500%!

前端圈的朋友们,谁还没在Vue3项目上踩过性能的坑?满心期待开发出的组件,一到高并发场景就频繁假死,用户反馈页面点不动,产品经理追着问进度,自己调试到心态炸裂!别以为这是个例,不少人在电商大促、数...

前端流行框架Vue3教程:26. 异步组件

根据上节课的代码,我们在切换到B组件的时候,发现并没有网络请求:异步组件:...

取消回复欢迎 发表评论: