本文大部分内容转自:http://blog.fens.me/java-kettle-plugin-eclipse/
在配置过程中出现了一些问题,这里给出解决方案以及资源。
前言
Kettle一个开源的ETL工具,提供了一套界面操作的解决方案,从而代替原有的程序开发。但有时我们还需要开发自己的插件,来满足我们的业务需求。Kettle基于Eclipse的架构系统,通过JAVA作为客户端的实现。强大的ETL功能,和图形界面的操作,让Kettle成为免费的ETL工具的首选。
目录
1. Kettle插件开发介绍
2. 搭建kettle源代码环境
3. 在Eclipse中构建kettle项目
4. 在Eclipse中构建插件项目
5. 配置插件到Kettle中
6. Kettle项目启动
7. 在kettle项目集成插件源代码
1. Kettle插件开发介绍
在我们做ETL工作的时候,在某些项目中往往会遇到一些特别的流程任务,kettle原有的流程处理节点已经不能满足我们的要求,这时候我们就需要定制流程处理节点了。定制流程节点主要是针对数据的管理、数据的验证和某些特别文件数据的提取。大家通过查看kettle源代码,就可以知道怎样去创建你自己的kettle插件了。
Kettle的插件开发,需要依赖于Kettle的源代码环境。
2. 搭建kettle源代码环境
1). 从github上clone下来
git clone https://github.com/lihongqiang/pentaho-kettle
2). 下载完成,执行ant,如果不成功,请自行看log info,一般就是build中描述的不存在而已。
~切换到kettle目录执行ant
Buildfile: D:\workspace\java\kettle\build.xml
......BUILD SUCCESSFULTotal time: 1 minute 29 seconds
build成功!!
3. 在Eclipse中构建kettle项目
1). 把kettle项目,导入到Eclipse中。
4. 在Eclipse中构建插件项目
1). 构建插件项目:可以基于一个模板去构建插件。
百度云盘:http://pan.baidu.com/s/1ntH2Btn
2). 解压后导入到eclipse工程:TemplateStepPlugin(和下面的kettle-TemplatePlugin类似)
复制类库
· 从kettle项目中,复制lib的*.jar到kettle-TemplatePlugin中的libext目录
· 从kettle项目中,复制libswt/win64的swt.js到kettle-TemplatePlugin中的libswt/win64目录
3). 刚才复制的类库加入项目依赖
4). 在kettle-TemplatePlugin项目,执行ant
~ D:\workspace\java\kettle-TemplatePlugin>ant
.......BUILD SUCCESSFULTotal time: 0 seconds
5). 修改distrib目录的文件
· icon.png:图标文件
· plugin.xml: 插件的配置文件(4.4以后的版本,可以去掉)
· TemplateStepPlugin.jar:是通过ant生成的文件
5. 配置插件到Kettle中
1). 把kettle-TemplatePlugin发布到kettle中
a. 在kettle是工程增加2个目录
~ mkdir D:\workspace\java\kettle\distrib\plugins\steps\myPlugin
~ mkdir D:\workspace\java\kettle\plugins\steps\myPlugin
b. 修改kettle-TemplatePlugin的build.xml文件
<property name="deploydir" location="D:\workspace\java\kettle\distrib\plugins\steps\myPlugin"/>
<property name="projectdir" location="D:\workspace\java\kettle\plugins\steps\myPlugin"/> <fileset dir="${libswt}/win64/" includes="*.jar"/> <target name="deploy" depends="distrib" description="Deploy distribution..." ><echo>deploying plugin...</echo><copy todir="${deploydir}"><fileset dir="${distrib}" includes="**/*.*"/></copy> <copy todir="${projectdir}"><fileset dir="${distrib}" includes="**/*.*"/></copy></target>
c. kettle-TemplatePlugin项目执行ant
D:\workspace\java\kettle-TemplatePlugin>ant
Buildfile: D:\workspace\java\kettle-TemplatePlugin\build.xml BUILD SUCCESSFULTotal time: 0 seconds
2). 在kettle中查看目录:D:\workspace\java\kettle\distrib\plugins\steps\myPlugin
kettle-TemplatePlugin项目的3个文件,已经被放到了正确的位置
6. 命令行项目启动
1). 命令行启动kettlea. 修改Spoon启动命令,不开启新窗口,直接以JAVA运行
b. 运行Spoon.bat命令
~ D:\workspace\java\kettle\distrib>Spoon.bat ......
2). 查看kettle-TemplatePlugin 插件
a.点击核心对象,在Demon文件夹下面
7. 在kettle项目集成插件源代码
1). 通过Eclipse的 link source功能,连接kettle-TemplatePlugin项目
a. 在kettle项目中,选择link source,输入TemplatePlugin/src的地址和src的名字。
2). 通过Eclipse启动kettle
a. 在Eclipse中配置启动Main Class: org.pentaho.di.ui.spoon.Spoon
3). 通过Eclipse调用kettle-TemplatePlugin
a. 修改TemplateStepDialog.java,找到open方法,增加一行输出
public String open() {
System.out.println(“Open a dialog!!!”); ...
}
注意:这里在修改之后使用ant构建时会出现编码问题。
解决方法:
找到compile这个target,加入compilerarg line哪一行代码。
<target name="compile" depends="prepare">
<echo message="5.compile" />
<javac fork="true" target="1.6" srcdir="${src}" destdir="${build}" debug="true">
<!--给编译器指定编码,防止出现:"警告: 编码 GBK 的不可映射字符"-->
<compilerarg line="-encoding UTF-8 " />
<classpath refid="external.jars.path" />
</javac>
<echo message="compile finished!" />
</target>
b. 在Eclipse中,通过debug启动:org.pentaho.di.ui.spoon.Spoon
双点Template Plugin的图标,看到日志显示”Open a dialog!!!“
这样我们就构建好了,kettle插件的开发环境。接下来,我们就可以进行插件开发了!!