Kettle源码学习(一)——把Kettle项目跑起来
kettle(pentaho data integration),是一款开源的C/S版的ETL工具,最近打算学习一下kettle源码,并自己写一个mini kettle,并改造成基于事件触发的流处理模型,前端欲支持桌面版和Web版。
首先,首要的工作是将kettle工程构建起来,达到能边跑看调试来观察学习源码。笔者采用的是自己构建一个项目,将kettle的相关模块代码和资源文件导入,并添加依赖库的方式,自认为有些不爽,但由于官网github下下来的工程,采用的是ivy构建工具,笔者没办法把依赖都下载下来,所以只能采用这种拙劣的方式。具体步骤如下:
下载源码。
本次源代码,笔者使用的是5.0.1-stable-R版本。kettle使用git进行版本控制,我们到kettle的github仓库将源代码下载下来(也可以使用git命令下载相应版本分支)。
如上图所示,访问github仓库,在Branch中选择tags,直接搜索5.0.1,选择5.0.1-stable-R版本,接着,点击Download ZIP下载项目的压缩文件到本地,并解压。
下载kettle发布包。
这一步是为了为工程提供所依赖的jar包,由于很多jar无法下载成功,这里直接使用发布包中带的jar包,在后面的步骤中,将以此为基础新建用户库,新建的工程将依赖这个用户库。
访问https://sourceforge.net/projects/pentaho/files/Data Integration/ 下载相应版本(笔者的是5.0.1-stable-R版本)的发布包,解压到本地。
如果读者想使用其他版本,原则上是可以的,只要源代码和发布包的版本一致。
新建工程,拷入代码、资源。
在Eclipse中,新建java工程,命名为kettle-5.0.1,新建几个源代码文件夹(source folder),分别为:core、dbdialog、engine、ui、resources,core、dbdialog、engine、ui与下载下来的源代码工程里的目录是一致的,将存放各个模块源代码,resources将存放这四个模块里的资源文件。
分别拷贝步骤一获取的源代码的四个目录下的src目录下的org文件夹将其拷至新建工程的相应源代码文件夹。并将源代码的四个目录下的src目录下的除org文件夹以外的文件,拷贝至新建工程的resources源代码文件夹。另外,需要将源代码的assembly文件夹拷贝至新建工程中,设置子目录package-res为源代码文件夹,并把assembly\package-res\ui目录里的内容拷贝一份至新建工程的ui源代码文件夹下。
完成此步骤,将得到如图所示的工程结构(不包含kettle-5.0.1用户库依赖)。
配置项目jdk版本和用户库。
右键工程build path选择configure build path,修改jre system library为jdk1.6。点击windows->preferences,创建用户库kettle-5.0.1。如图所示:
add external jars,找到步骤二下载下来的发布包下的lib目录,全部导入,并导入libswt\win64目录下的swt.jar,这里还需要将部分jar移除,需移除的jar如下:kettle-core-5.0.1-stable.jar、kettle-dbdialog-5.0.1-stable.jar、kettle-engine-5.0.1-stable.jar、kettle-ui-swt-5.0.1-stable.jar、xml-apis.jar、xmlParserAPIs-2.6.2.jar、stax-api-1.0.1.jar、wsdl4j-qname-1.6.1.jar。
前4个kettle开头的是我们新建工程中已经有的代码,后面几个是为了解决jar包冲突问题。
新建好用户库,右键工程build path选择configure build path,点击add library,选择User library,将kettle-5.0.1引入。如下图所示
完成以上步骤后后,kettle就能跑起来了,kettle入口类是ui模块下的org.pentaho.di.ui.spoon.Spoon.java
Kettle源码学习(一)——把Kettle项目跑起来的更多相关文章
- kettle系列-1.kettle源码获取与运行
第一次写博客,心里有点小激动,肯定有很多需要改进的地方,望海涵. kettle算是我相对较为深入研究过的开源软件了,也是我最喜欢的开源软件之一,它可以完成工作中很多体力劳动,在ETL数据抽取方面得到了 ...
- pentaho专题系列之kettle篇--kettle源码编译
最近看了一些kettle的文章,都是kettle7.0以前的,已经跟不上时代了.截止笔者写这篇文章的时候,github上面的已经是7.1.0.3了,而且是发行版的,最新的快照版本已经是8.0的了.基于 ...
- 『TensorFlow』SSD源码学习_其一:论文及开源项目文档介绍
一.论文介绍 读论文系列:Object Detection ECCV2016 SSD 一句话概括:SSD就是关于类别的多尺度RPN网络 基本思路: 基础网络后接多层feature map 多层feat ...
- Hadoop源码学习笔记之NameNode启动场景流程一:源码环境搭建和项目模块及NameNode结构简单介绍
最近在跟着一个大佬学习Hadoop底层源码及架构等知识点,觉得有必要记录下来这个学习过程.想到了这个废弃已久的blog账号,决定重新开始更新. 主要分以下几步来进行源码学习: 一.搭建源码阅读环境二. ...
- 05.ElementUI源码学习:项目发布配置(github pages&npm package)
0x00.前言 书接上文.项目第一个组件已经封装好,说明文档也已编写好.下面需要将说明文档发布到外网上,以此来展示和推广项目,使用 Github Pages功能实现.同时将组件发布之 npm 上,方便 ...
- Qt Creator 源码学习笔记03,大型项目如何管理工程
阅读本文大概需要 6 分钟 一个项目随着功能开发越来越多,项目必然越来越大,工程管理成本也越来越高,后期维护成本更高.如何更好的组织管理工程,是非常重要的 今天我们来学习下 Qt Creator 是如 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
随机推荐
- Django安装和介绍
在CMD和pycharm的安装方法. 先说CMD的安装方法 1,使用pip3 install django 2,进入c:python\Scripts 3,django-admin.exe startp ...
- springboot升级2.0 fastjson报错? 2.0以上应该怎么整合fastjson?
SpringBoot2.0如何集成fastjson?在网上查了一堆资料,但是各文章的说法不一,有些还是错的,可能只是简单测试一下就认为ok了,最后有没生效都不知道.恰逢公司项目需要将JackSon换成 ...
- Django学习:创建admin后台管理站点
Django自带一个后台管理站点,方便我们管理数据.这个界面只给管理员使用,并不对大众开放. 创建管理员用户 py manage.py createsuperuser 如下图所示: 用户名不填的话,默 ...
- 01_Hive简介及其工作机制
1.Hive简介 Hive是一个基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一个表.并提供类SQL查询功能, 可以将sql语句转换为MapReduce任务运行.其优点是学习成本低, ...
- 面试题——常见的gc算法有哪些?
常见的gc算法有哪些? java garbage collection是一个自动进程,用于管理程序使用的运行时内存.通过自动执行JVM,可以减轻程序中分配和释放内存资源的开销. 垃圾回收机制是由垃圾回 ...
- JAI丢包掉帧处理
问题 时间戳停止变化/图像停止更新 描述 本小白刚刚接触JAI,有很多不懂的地方.这次遇到问题是请教了YZ大哥(不知道年龄,暂时这么称呼),很感谢YZ大哥的耐心指导.因为我不仅不知道怎么调,连在哪里调 ...
- CF700E Cool Slogans——SAM+线段树合并
RemoteJudge 又是一道用线段树合并来维护\(endpos\)的题,还有一道见我的博客CF666E 思路 先把\(SAM\)建出来 如果两个相邻的串\(s_i\)和\(s_{i+1}\)要满足 ...
- JavaScript中的类(Class)
基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到的,新的class写法是让对象原型的写法更加清晰,更像面向对象编程的语法而已. ES5生成例对象传统方法是通过构造函 ...
- pandas.DataFrame.where和mask 解读
1.前言背景 没怎么用过df.where 都是直接使用loc.apply等方法去解决. 可能是某些功能还没有超出loc和apply的适用范围. 2.进入df.where和df.mask DataFra ...
- Git始终忽略特定文件的某一行内容
笔者在编写Z Shell文件的时候经常会使用到set -x来开启调试,但不希望提交到仓库 解决方案 Git提供了一种文件过滤器,此方法可以帮助在提交时移除set -x 我们先来编写脚本,如何移除这一行 ...