# custom-nar-bundles **Repository Path**: dukexia_admin/custom-nar-bundles ## Basic Information - **Project Name**: custom-nar-bundles - **Description**: NIFI自定义开发代码结构规范 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2020-06-17 - **Last Updated**: 2021-04-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NIFI自定义开发规范 去年一年发现 Apache NIFI的迭代速度加快了,一年的时间发布了很多版本。我们自定义开发NIFI,希望在满足自定义的同时, 又能够很方便快速的升级版本(毕竟是吧,一两个人的开发怎么能搞得过我大Apache开源社区)。所以结合NIFI源码结构的特点, 我做了一个自定义开发NIFI的项目结构规范。 ## 后端自定义开发规范 ``` 1. 自定义开发时能够独立新建子moudle的,优先新建子moudle项目。 1.1 只要是新建的component组件,都是可以新建子项目独立处理的 1.2 大部分针对组件级别的修改(比如加个属性改写个功能什么的),是可以通过继承覆盖解决的。当然,发现问题,在源码上解决问题, 推个PR并被社区采纳才是最棒的。 1.3 新建子moudle的NIFI内部nar、jar依赖版本要重视统一管理 2. 需要修改源码的,代码层级需要详细注释,并在相应的wiki里做出文档说明并及时维护 3. 切记轻易不要修改源码的包名路径名 4. 注意代码质量 ``` ## 前端代码 ``` 1. 尽量不要修改或大篇幅的修改前端代码(关于NIFI国际化的想法我认为是没必要考虑的,本身架构不支持,修改代价太大) 2. 不得已必须修改前端的源码,需要详细注释,并在wiki里做出文档说明并及时维护 ``` ## 版本号管理 ### 主项目parent包 ``` 1. 指定整个应用的dependencyManagement 2. 定义项目的发布的仓库地址distributionManagement 3. 所有第三方依赖的版本号全部定义在properties下 4. 所有内部模块依赖版本号统一使用${project.version} (注:NIFI所有的内部模块依赖版本号全部在custom-nar-bundles中声明) 5. 指定所有的子模块modules ``` ### 项目子模块pom.xml ``` 1. 明确定义parent模块的artifactId,groupId,version 2. 不要定义子模块的version(同parent保持一致) 3. 子模块无需定义groupId 4. 建议子模块所有的依赖包版本管理全部集成在直接parent模块 (如果是隶属不同nar的依赖版本管理,需要明确在名称命名上显示出来,比如)) ``` ## 统一parent版本号 升级NIFI版本,需要统一各个Moudle ``中的``时,修改完custom-nar-bundles的版本号后, 在custom-nar-bundles目录下执行以下maven命令 ``` mvn -N versions:update-child-modules ``` ## 参考DEMO 参考custom-standard-bundle的配置 ## 自定义打包及发布配置 详细看[custom-assembly](./custom-assembly/README.md) ## 总结 这一套自定义开发代码结构规范,达到了对NIFI源码侵入程度最小的效果了。总体只要微微修改了源码文件四处地方就可以融合到源码项目 第一处: nifi的pom.xml 添加 custom-nar-bundles的依赖 第二处: 在nifi-assembly的pom.xml 添加zip依赖 ```xml org.apache.nifi custom-assembly 1.11.4 resources runtime zip ``` 第三处: 在nifi-assembly的src/main/assembly/dependencies.xml中排除custom-assembly.zip包 ```xml runtime false lib 0770 0664 true nifi-bootstrap nifi-resources nifi-docs custom-assembly javax.xml.bind:jaxb-api com.sun.xml.bind:jaxb-impl com.sun.xml.bind:jaxb-core javax.activation:javax.activation-api javax.annotation:javax.annotation-api ``` 添加一行 custom-assembly 第四处: 在nifi-assembly的src/main/assembly/common.xml中配置解压策略,在dependencySets中添加如下dependencySet 注意unpackOptions不能加 true 会导致nar jar文件损坏 ```xml runtime false ./ 0770 0664 true custom-assembly true conf/* jdbc/* lib/* ```