文章目录

  • 07-PDI(Kettle)源码编译8.2.0.0.R版本
    • 1.安装PDI8.2.0.0.R的parent工程到本地
      • 1.1配置Maven的settings.xml文件
      • 1.2安装PDI源码依赖的parent工程到本地仓库
      • 1.3下载并编译PDI8.2.0.0.R源码
        • 1.下载源码
        • 2.用idea打开--问题及解决方案
        • 3.用idea运行--问题及解决方案
      • 1.4运行项目
      • 1.5小技巧
    • 总结

07-PDI(Kettle)源码编译8.2.0.0.R版本

博客上有很多关于PDI源码编译的文章,但大多版本较早,或是有些文件已经找不多,本博客基于2021年10月的PDI源码编译过程制作而成,并在编译过程中解决了对应的问题,解决方案放在博客最后。

1.安装PDI8.2.0.0.R的parent工程到本地

1.1配置Maven的settings.xml文件

PDI编译过程中的很多依赖需要从Maven的远程私有仓库中下载,这个私有仓库的地址包含在PDI提供的一个Settings.xml中,这个文件网络提供的下载地址大多不可用了,经过寻找,发现github中这个下载链接,新的地址如下。
下载地址

# github地址
https://github.com/pentaho/maven-parent-poms/tree/8.2.0.0-R
# 码云下载地址
https://gitee.com/mirrors_pentaho/maven-parent-poms/tree/8.2.0.0-R/

可以直接下载,也可以通过git下载,本文通过连接直接下载,下载后,然后解压在E:\kettle中,打开解压后的目录,在

E:\kettle\maven-parent-poms-8.2.0.0-R\maven-parent-poms-8.2.0.0-R\maven-support-files

下会看到一个settings.xml文件,这个文件中有PDI远程maven私有仓库的地址,需要将
将原maven的conf目录下setttings.xml备份,将kettle提供的setttings.xml放在conf目录下,把PDI提供的settings.xml文件放在后,可以修改下本地仓库的位置,添加

<localRepository>D:\apache\maven-repository</localRepository>

到settings.xml中

1.2安装PDI源码依赖的parent工程到本地仓库

PDI源码目前基于Maven构建,源码的依赖来源于其父工程pentaho-ce-jar-parent-pom,进入到pentaho-ce-jar-parent-pom目录,

E:\kettle\maven-parent-poms-8.2.0.0-R\maven-parent-poms-8.2.0.0-R\pentaho-ce-parent-pom\pentaho-ce-jar-parent-pom

打开cmd终端,执行

mvn clean install

提示如下成功

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Pentaho Community Edition Project Parent POM For Java Projects SUCCESS [ 10.365 s]
[INFO] Pentaho Community Edition Project Parent POM For Bundle Projects SUCCESS [  1.186 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.797 s
[INFO] Finished at: 2021-09-18T07:29:35+08:00
[INFO] Final Memory: 32M/265M
[INFO] ------------------------------------------------------------------------

1.3下载并编译PDI8.2.0.0.R源码

1.下载源码

下载地址

https://github.com/pentaho/pentaho-kettle/tree/8.2
或
https://gitee.com/mirrors/Kettle/tree/8.2.0.0-R/

可以直接下载,然后解压

也可以通过以下git下载,本教程采用下载后解压的方式,将压缩包放在E:\kettle中,解压,将解压后的源码放在如下路径:

E:\kettle\Kettle-8.2.0.0-R

2.用idea打开–问题及解决方案

1. 出现问题1:
错误提示:

Could not find artifact org.eclipse.core:commands:jar:3.3.0 in pentaho-public (http://nexus.pentaho.org/content/groups/omni)

解决办法:修改依赖配置
打开:<源码目录>\ui\pom.xml,搜索内容:

<dependency><groupId>org.eclipse.swt</groupId><artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
</dependency>

替换为:

    <dependency><groupId>org.eclipse.swt</groupId>
<!--      <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>--><artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId><version>4.6</version></dependency>

执行

mvn clean install -Dmaven.test.skip=true

我是在晚上11点左右运行的,白天感觉基本无法执行成功,很多依赖无法下载

2. 出现问题2:
提示错误

Failed to execute goal on project pdi-plugins: Could not resolve dependencies for project org.pentaho.di:pdi-plugins:pom:8.2.0.0-342: Could not find artifact org.pentaho.di.plu gins:google-bigquery-plugin:zip:8.2.0.0-342 in pentaho-public (http://nexus.pentaho.org/content/groups/omni) -> [Help 1]

解决办法:
在mvnrepository 和https://nexus.pentaho.org/content/groups/omni/ 确定依赖是否存在,发现不存在,修改版本号
ctrl+shift +f ,全局查找

google-bigquery-plugin

将pom文件中原有的配置

<google-bigquery-plugin.version>${project.version}</google-bigquery-plugin.version>

修改为

    <google-bigquery-plugin.version>8.1.0.0-365</google-bigquery-plugin.version>

3.用idea运行–问题及解决方案

运行工程的

ui模块

下的

org.pentaho.di.ui.spoon.Spoon.java

文件,右键运行

Spoon.main()

即可运行项目,但运行过程中可能出现很多问题。
我的这个文件位于

E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\ui\src\main\java\org\pentaho\di\ui\spoon\Spoon.java

1. 出现问题3:swt-gtk.dll
错误提示:

java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: no swt-gtk-4623 in java.library.pathno swt-gtk in java.library.pathCan't load library: C:\Users\DELL\.swt\lib\win32\x86_64\swt-gtk-4623.dllCan't load library: C:\Users\DELL\.swt\lib\win32\x86_64\swt-gtk.dll

解决办法:

在 IDEA 中打开菜单【File - Project Structure】(也可以直接按快捷键:Ctrl+Alt+Shift+S)
在弹出的【Project Structrue】窗口中左侧选择【Modules】,
然后在中间选择【kettle-ui-swt】模块,然后在右侧切换到【Dependencies】标签页,拖动右侧滚动条至大约快到底部的位置,
找到【Maven:org.eclipse.swt:org.eclipse.swt.win32.win32.x86_64:4.6】,然后通过鼠标点击并拖动的方式将其移动到【Maven:org.eclipse.swt:org.eclipse.swt.gtk.linux.x86_64:4.6】的前面,
然后点击【ok】按钮。将win32的依赖移动到linux上面

如下图:

需要注意:每次 Maven 重新 Import 后调整过的顺序会被还原,需要再次手动调整。
配置完成,点击工具栏的启动按钮启动 Spoon,稍等片刻,将打开 Kettle 界面。

2.出现问题4:
提示错误:plugin\log4j.xml

Could not parse file [plugins\kettle5-log4j-plugin\log4j.xml].
java.io.FileNotFoundException: E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\plugins\kettle5-log4j-plugin\log4j.xml (系统找不到指定的路径。)

原因分析:
源码中Spoon的方法registerUIPluginObjectTypes()中会注册环境根目录下的plugins目录,后续扫描插件jar包时会用到。
如:BasePluginType类的方法registerPluginJars()与findAnnotatedClassFiles( String x),会对plugins下的jar文件扫描。
而编译后的项目会在target目录下存在插件jar包,但是并没有在plugins目录下存在正确的插件目录如日志插件目录kettle5-log4j-plugin、json插件目录kettle-json-plugin
所以在扫描到这些jar包后初始化时找不到对应目录下的某些文件导致出错。

解决方案:
启动失败后, IDEA 会自动添加一个启动配置,点击工具栏上的启动配置【Spoon】然后点击【Edit Configurations】
配置Spoon的启动configuration,设置Working directory项为MODULE_WORKING_DIR 即dist项目的目录,其下没有plugins目录自然扫描不到jar包,不会执行日志插件初始化操作。
这样启动的kettle是没有插件的,如果想加载插件则需要将编译后的zip包的plugins和system目录拷贝至dist根目录下

-Djava.ext.dirs="lib":$JAVA_HOME/lib/ext
// Working directory:后面追加 dist
E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\dist

参考:https://blog.csdn.net/qq_41471057/article/details/106833982

3.出现问题5
提示错误:XulException

1/09/18 09:10:11 - General - ERROR (version Unknown, build 0 from 2021/09/18 09:10:05.390 by DELL) : Error initializing transformation
2021/09/18 09:10:11 - General - ERROR (version Unknown, build 0 from 2021/09/18 09:10:05.390 by DELL) : org.pentaho.ui.xul.XulException: Can not locate Xul document [ui/spoon.xul]
2021/09/18 09:10:11 - General -     at org.pentaho.ui.xul.impl.AbstractXulLoader.findDocument(AbstractXulLoader.java:512)
2021/09/18 09:10:11 - General -     at org.pentaho.ui.xul.impl.AbstractXulLoader.loadXul(AbstractXulLoader.java:229)
2021/09/18 09:10:11 - General -     at org.pentaho.di.ui.spoon.Spoon.init(Spoon.java:865)
2021/09/18 09:10:11 - General -     at org.pentaho.di.ui.spoon.Spoon.createContents(Spoon.java:9143)
2021/09/18 09:10:11 - General -     at org.eclipse.jface.window.Window.create(Window.java:426)
2021/09/18 09:10:11 - General -     at org.eclipse.jface.window.Window.open(Window.java:785)
2021/09/18 09:10:11 - General -     at org.pentaho.di.ui.spoon.Spoon.start(Spoon.java:9174)
2021/09/18 09:10:11 - General -     at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:707)
2021/09/18 09:10:11 - General - ERROR (version Unknown, build 0 from 2021/09/18 09:10:05.390 by DELL) : Error starting Spoon shell
2021/09/18 09:10:11 - General - ERROR (version Unknown, build 0 from 2021/09/18 09:10:05.390 by DELL) : java.lang.NullPointerException
2021/09/18 09:10:11 - General -     at org.pentaho.di.ui.spoon.Spoon.init(Spoon.java:918)
2021/09/18 09:10:11 - General -     at org.pentaho.di.ui.spoon.Spoon.createContents(Spoon.java:9143)
2021/09/18 09:10:11 - General -     at org.eclipse.jface.window.Window.create(Window.java:426)
2021/09/18 09:10:11 - General -     at org.eclipse.jface.window.Window.open(Window.java:785)
2021/09/18 09:10:11 - General -     at org.pentaho.di.ui.spoon.Spoon.start(Spoon.java:9174)
2021/09/18 09:10:11 - General -     at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:707)
stopping

解决办法:
配置源码目录
在源码目录下新建目录 dist,在 dist 目录中新建子目录 lib
编译成功的发布包 zip位于:

E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\assemblies\client\target\pdi-ce-8.2.0.0-342.zip

将之前编译成功的发布包 zip 中的 lib 目录下的以下 4 个 jar 文件拷贝到<源码目录>\dist\lib 中:

om4j-2.1.1.jar
jaxen-1.1.6.jar
slf4j-api-1.7.7.jar
slf4j-nop-1.7.7.jar

将之前编译成功的发布包 zip 中的 ui 目录解压至<源码目录>\dist 中
4.出现问题6
提示错误jaxen

 2021/09/18 09:12:49 - General - ERROR (version Unknown, build 0 from 2021/09/18 09:12:45.612 by DELL) : Error starting Spoon shell2021/09/18 09:12:49 - General - ERROR (version Unknown, build 0 from 2021/09/18 09:12:45.612 by DELL) : java.lang.NoClassDefFoundError: org/jaxen/JaxenException2021/09/18 09:12:49 - General -   at org.pentaho.ui.xul.impl.AbstractXulLoader.preProcess(AbstractXulLoader.java:357)2021/09/18 09:12:49 - General -  at org.pentaho.ui.xul.impl.AbstractXulLoader.loadXul(AbstractXulLoader.java:113)2021/09/18 09:12:49 - General -     at org.pentaho.ui.xul.swt.SwtXulLoader.loadXul(SwtXulLoader.java:128)2021/09/18 09:12:49 - General -    at org.pentaho.ui.xul.swt.SwtXulLoader.loadXul(SwtXulLoader.java:122)2021/09/18 09:12:49 - General -    at org.pentaho.ui.xul.impl.AbstractXulLoader.loadXul(AbstractXulLoader.java:239)2021/09/18 09:12:49 - General -     at org.pentaho.di.ui.spoon.Spoon.init(Spoon.java:865)2021/09/18 09:12:49 - General -    at org.pentaho.di.ui.spoon.Spoon.createContents(Spoon.java:9143)2021/09/18 09:12:49 - General -     at org.eclipse.jface.window.Window.create(Window.java:426)2021/09/18 09:12:49 - General -   at org.eclipse.jface.window.Window.open(Window.java:785)2021/09/18 09:12:49 - General -     at org.pentaho.di.ui.spoon.Spoon.start(Spoon.java:9174)2021/09/18 09:12:49 - General -  at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:707)2021/09/18 09:12:49 - General - Caused by: java.lang.ClassNotFoundException: org.jaxen.JaxenException2021/09/18 09:12:49 - General -   at java.net.URLClassLoader.findClass(URLClassLoader.java:381)2021/09/18 09:12:49 - General -    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)2021/09/18 09:12:49 - General -     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)2021/09/18 09:12:49 - General -     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)2021/09/18 09:12:49 - General -     ... 11 morestoppingProcess finished with exit code 0

原因及解决办法:Jaxen依赖包依赖未传递成功,找到根项目下的engine下的pom.xml,找到如下依赖,注释掉test域可见的配置,使其将依赖传递至kettle-ui-swt,reload一下

<!-- required by org.dom4j --><dependency><groupId>jaxen</groupId><artifactId>jaxen</artifactId><!--<scope>test</scope>--></dependency>

然后右键pom文件,reload工程

也可以在<源码目录>\dist\lib,把依赖放在lib目录下

5.出现问题7
提示错误EventManager

java: 无法访问org.eclipse.core.commands.common.EventManager
找不到org.eclipse.core.commands.common.EventManager的类文件

参考资料:

https://blog.csdn.net/andywangcn/article/details/8122238

编译Kettle的PDI DB Dialog模块失败

https://www.codercto.com/a/38106.html

与开始的错误有关系

Could not find artifact org.eclipse.core:commands:jar:3.3.0 in pentaho-public (http://nexus.pentaho.org/content/groups/omni)

在mvnrepository.com下载

Home » org.eclipse.core » org.eclipse.core.commands

放在<源码目录>\dist\lib

E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\dist\lib

目录下,然后在把该依赖添加到模块下
这个问题存在于org.eclipse.core:commands:jar:3.3.0-I20070605-0010中的i变为了小写导致的
问题存在于org.eclipse.core:commands:jar:3.3.0-I20070605-0010中的i变为了小写导致的

查看kettle-ui-swt中的iml文件

<orderEntry type="library" exported="" name="Maven: org.eclipse.core:commands:3.3.0-i20070605-0010" level="project" />

查看maven下maven-metadata-pentaho-public.xml的元数据

<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0"><groupId>org.eclipse.core</groupId><artifactId>commands</artifactId><version>3.3.0-I20070605-0010</version><versioning><latest>3.3.0-i20070605-0010</latest><release>3.3.0-i20070605-0010</release><versions><version>3.2.0-I20060605-1400</version><version>3.3.0</version><version>3.3.0-I20070605-0010</version><version>3.3.0-i20070605-0010</version></versions><lastUpdated>20201103145618</lastUpdated></versioning>
</metadata>

maven安装本地jar

确定依赖的jar,下载

mvn install:install-file -Dfile=D:/taobao-sdk-java-auto-20160607.jar -DgroupId=com.ganshane.specs -DartifactId=taobao-sdk-java-auto-20160607 -Dversion=1.0.0 -Dpackaging=jar

6.出现问题8
提示错误

libpng warning: iCCP: cHRM chunk does not match sRGB

解决办法:

关闭qq拼音输入法

1.4运行项目

以上问题都解决后,PDI就可以基本运行了,可以通过maven打包,也可以通过Spoon.main直接run

1.5小技巧

PDI的本地国际化配置位置

E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\plugins\json\core\src\main\resources\org\pentaho\di\trans\steps\jsoninput\messages\messages_en_US.properties
E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\plugins\json\core\src\main\resources\org\pentaho\di\trans\steps\jsoninput\messages\messages_es_AR.properties
E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\plugins\json\core\src\main\resources\org\pentaho\di\trans\steps\jsoninput\messages\messages_es_ES.properties
E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\plugins\json\core\src\main\resources\org\pentaho\di\trans\steps\jsoninput\messages\messages_fr_FR.properties
E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\plugins\json\core\src\main\resources\org\pentaho\di\trans\steps\jsoninput\messages\messages_it_IT.properties
E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\plugins\json\core\src\main\resources\org\pentaho\di\trans\steps\jsoninput\messages\messages_ja_JP.properties
E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\plugins\json\core\src\main\resources\org\pentaho\di\trans\steps\jsoninput\messages\messages_ko_KR.properties
E:\kettle\Kettle-8.2.0.0-R\Kettle-8.2.0.0-R\plugins\json\core\src\main\resources\org\pentaho\di\trans\steps\jsoninput\messages\messages_zh_CN.properties

如果缺少一些依赖,可以先下载到本地,再通过Maven去安装本地jar
确定依赖的jar,下载

mvn install:install-file -Dfile=D:/taobao-sdk-java-auto-20160607.jar  -DgroupId=com.ganshane.specs -DartifactId=taobao-sdk-java-auto-20160607  -Dversion=1.0.0 -Dpackaging=jar

总结

本文主要实现了PDI(kettle)8.2.0.0.R源码编译,中间包含了本人遇到的问题,以及解决方案,在编译的过程中,遇到了大量的问题,并查找了大量的的文章。网络提供的资源给了我很多的参考,但直接参考存在一些小问题,或是文件无法下载,或是没有一些问题的解决方案,本文的主要目的就是希望读者可以一步到位的实现PDI的源码编译,有问题的读者,可以留言,看到如果可以复现的话,我会及时回复的。

07-PDI(Kettle)源码编译8.2.0.0.R版本相关推荐

  1. Open vSwitch(OVS)源码编译Ubuntu16.04,Linux内核版本4.15

    Open vSwitch(OVS)源码编译Ubuntu16.04,Linux内核版本4.15 关于Open vSwitch(OVS)版本与Linux内核的关系,参考这篇文章:Open vSwitch( ...

  2. opencv4.0在linux下编译,Ubuntu 18.04源码编译安装OpenCV 4.0步骤

    Ubuntu 18.04下标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 108 ...

  3. openssh升级_Redhat 6.5源码编译升级openssh到7.8版本

    1.检验升级OpenSSH依赖的相关组件 [root@web02 /]# rpm -qa | grep gcc [root@web02 /]# rpm -qa | grep zlib-devel [r ...

  4. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)...

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  5. 麒麟Kylin V10 桌面版源码编译安装Qt5.6.0

    麒麟Kylin V10 桌面版源码编译安装Qt5.6.0 硬件环境:PHYTIUM FT-2000/4开发板 系统环境:Kylin V10 Desktop 系统 安装包下载:自己所需版本 解压 相关依 ...

  6. Android源码编译(基于Ubuntu18.0.4)

    文章目录 一.环境搭建 硬件要求 软件要求 操作系统和 JDK 主要软件包 软件安装 Git安装 repo工具安装 安装 openJDK 8 其他依赖安装 二.源码下载 建立源码文件夹 初始化仓库 源 ...

  7. 源码编译安装gcc-5.3.0

    2019独角兽企业重金招聘Python工程师标准>>> 系统环境:Amazon Linux AMI 2015.09.2 (HVM)---Fedora 23 Server 1.下载gc ...

  8. PHP 8.0 源码编译安装 JIT 尝鲜

    女主宣言 今天小编为大家分享一篇最简化的 PHP 8 源码编译安装方法.PHP 8.0 Alpha 1 已经在2020年6月25号发布了,今天带领大家快速尝鲜 PHP 8.0 的新特性 JIT.希望能 ...

  9. 安卓系统源码编译系列(一)——下载安卓系统源码教程

    最近需要编译安卓系统,咨询了一个编译过安卓系统的朋友,说是下载源码就得下载两天,于是做好了长期抗战的准备,开始了下载安卓源码的旅程.在刚开始下载时,可以参照的内容只有官方教程,于是跟着官方教程一步一步 ...

最新文章

  1. Linq中string转int的方法
  2. [J2ME]RSSOwlMidlet(RSS无线阅读器)设计说明
  3. 域控查看ldap端口命令_LDAP基础安装与简单入门使用
  4. 【MFC相关问题】vs 2019 出现 building MFC application with /MD [d] (CRT dll version) requires MFC shared
  5. SecureCRT学习之道:SecureCRT常用快捷键设置与字体设置方法
  6. 阿里云服务器企业该如何选择
  7. MyEclipse问题收集
  8. 五种常见的linux系统有哪些,常见的Linux操作系统有哪些
  9. 【面试题】2021最新Vue面试题汇总
  10. python加粗线宽代码_python-增加matplotlib中图例行的线宽
  11. Java中自定义比较器
  12. 为何学习Python?这是我看到的最好回答
  13. openstack 虚拟机镜像制作
  14. Slidworks2018基础到实战设计视频教程 产品建模 渲染 钣金设计
  15. Linux内核4.14版本——mmc core(7)——mmc core主模块(3)总线io setting相关(struct mmc_ios)
  16. 快速下载“阿里云镜像网站“Centos各个版本 全流程
  17. APUE读书笔记-第十一章-线程
  18. C语言程序设计--学生信息管理系统
  19. mysql查询归档状态_数据库归档模式的管理
  20. matlab网页视频流,MATLAB - 捕获视频流(MJPEG,rtsp,mpeg)

热门文章

  1. 第一届PyCon China小记
  2. 分析智联招聘的API接口,进行数据爬取
  3. STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记二(3):Cortex-M3处理器异常模型
  4. 01 | Java入门级学习指南
  5. 【模式识别】Boosting
  6. 解决ActiveMQ服务停掉后无限重连问题
  7. 火狐浏览器书签工具栏图标_在Firefox书签工具栏中浓缩书签
  8. Python matplotlib 中填充颜色
  9. Samba服务器配置和使用全过程
  10. 排序算法之简单插入排序法