maven多模块项目怎么对外输出为一个构件
本篇内容介绍了"maven多模块项目怎么对外输出为一个构件"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
台式机生产线 | 我的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 | 直接依赖,即包含的当前工程中的模块 |
plugin | shade |
shade的核心配置
配置 | 说明(见名知意,先猜测) |
---|---|
phase | 挂接在maven的生命周期的package阶段 |
goal | 提供唯一的goal指令 shade |
createSourcesJar | 是否创建源码到jar包中,方便ide直接查看到源码 |
promoteTransitiveDependencies | 是否打包间接依赖 |
artifactSet-includes-include | 包含的子模块或者排除的子模块 |
transformers-transformer-resource | 转换器配置 |
excludes>-filter | 过滤器中排出某些文件 |
具体看上面的代码。
"maven多模块项目怎么对外输出为一个构件"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!