Skip to content

Castile/custom-nifi-nar

Repository files navigation

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的依赖版本管理,需要明确在名称命名上显示出来,比如<nar1.jackson.version>))

统一parent版本号

升级NIFI版本,需要统一各个Moudle <parent>中的<version>时,修改完custom-nar-bundles的版本号后, 在custom-nar-bundles目录下执行以下maven命令

mvn -N versions:update-child-modules

参考DEMO

参考custom-standard-bundle的配置

自定义打包及发布配置

详细看custom-assembly

总结

这一套自定义开发代码结构规范,达到了对NIFI源码侵入程度最小的效果了。总体只要微微修改了源码文件四处地方就可以融合到源码项目

第一处:

nifi的pom.xml 添加 custom-nar-bundles的依赖

第二处:

在nifi-assembly的pom.xml 添加zip依赖

        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>custom-assembly</artifactId>
            <version>2.2.0</version>
            <classifier>resources</classifier>
            <scope>runtime</scope>
            <type>zip</type>
        </dependency>

第三处:

在nifi-assembly的src/main/assembly/dependencies.xml中排除custom-assembly.zip包

<dependencySets>
        <!-- Write out all dependency artifacts to lib directory -->
        <dependencySet>
            <scope>runtime</scope>
            <useProjectArtifact>false</useProjectArtifact>
            <outputDirectory>lib</outputDirectory>
            <directoryMode>0770</directoryMode>
            <fileMode>0664</fileMode>
            <useTransitiveFiltering>true</useTransitiveFiltering>
            <excludes>
                <exclude>nifi-bootstrap</exclude>
                <exclude>nifi-resources</exclude>
                <exclude>nifi-docs</exclude>
                <exclude>custom-assembly</exclude>
                <!-- exclude jaxb/activation/annotation libs from lib, they'll be included in the java11 subdir -->
                <!-- TODO: remove these once minimum Java version is 11 -->
                <exclude>javax.xml.bind:jaxb-api</exclude>
                <exclude>com.sun.xml.bind:jaxb-impl</exclude>
                <exclude>com.sun.xml.bind:jaxb-core</exclude>
                <exclude>javax.activation:javax.activation-api</exclude>
                <exclude>javax.annotation:javax.annotation-api</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>

添加一行 custom-assembly

第四处:

在nifi-assembly的src/main/assembly/common.xml中配置解压策略,在dependencySets中添加如下dependencySet 注意unpackOptions不能加 true 会导致nar jar文件损坏

<!-- Write out all dependency artifacts to jdbc directory -->
        <dependencySet>
            <scope>runtime</scope>
            <useProjectArtifact>false</useProjectArtifact>
            <outputDirectory>./</outputDirectory>
            <directoryMode>0770</directoryMode>
            <fileMode>0664</fileMode>
            <useTransitiveFiltering>true</useTransitiveFiltering>
            <includes>
                <include>custom-assembly</include>
            </includes>
            <unpack>true</unpack>
            <unpackOptions>
                <includes>
                    <include>conf/*</include>
                    <include>jdbc/*</include>
                    <include>lib/*</include>
                </includes>
            </unpackOptions>
            <excludes>
            </excludes>
        </dependencySet>

About

自定义nifi nar包规范和模板结构

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages