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

简介: 文章目录07-PDI(Kettle)源码编译8.2.0.0.R版本1.安装PDI8.2.0.0.R的parent工程到本地1.1配置Maven的settings.xml文件1.2安装PDI源码依赖的parent工程到本地仓库

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.path
  no swt-gtk in java.library.path
  Can't load library: C:\Users\DELL\.swt\lib\win32\x86_64\swt-gtk-4623.dll
  Can'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

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

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

原因及解决办法: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" lev

查看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的源码编译


相关文章
|
6月前
|
编译器 数据处理 C++
Visual Studio配置并编译C++环境下GDAL库、SQLite环境与PROJ库的方法
Visual Studio配置并编译C++环境下GDAL库、SQLite环境与PROJ库的方法
337 1
|
XML 数据管理 编译器
Qt+GDAL开发笔记(二):在windows系统msvc207x64编译GDAL库、搭建开发环境和基础Demo
上一篇使用mingw32版本的gdal,过程曲折,为更好的更方便搭建环境,在windows上msvc方式对于库比较友好。
|
XML 数据管理 Linux
Qt+GDAL开发笔记(一):在windows系统mingw32编译GDAL库、搭建开发环境和基础Demo
麒麟系统上做全球北斗定位终端开发,调试工具要做一个windows版本方便校对,北斗GPS发过来的是大地坐标,应用需要的是经纬度坐标,所以需要转换,可以使用公式转换,但是之前涉及到了另一个shang市公司项目使用WG,最终选择了GDAL库进行转换。
|
存储 XML 缓存
01-PDI(Kettle)简介与安装
文章目录 01-PDI(Kettle)简介与安装 PDI(Kettle)简介 Kettle安装 Kettle核心知识点
01-PDI(Kettle)简介与安装
|
SQL 存储 安全
03-PDI(Kettle)导入与导出CDC(上)
文章目录 03-PDI(Kettle)导入与导出CDC 数据的全量、增量、差异备份 基于时间戳的源数据CDC 实验原理 实验步骤 基于触发器的CDC 实验原理
03-PDI(Kettle)导入与导出CDC(上)
|
SQL 关系型数据库 MySQL
03-PDI(Kettle)导入与导出CDC(中)
文章目录 03-PDI(Kettle)导入与导出CDC 数据的全量、增量、差异备份 基于时间戳的源数据CDC 实验原理 实验步骤 基于触发器的CDC 实验原理
03-PDI(Kettle)导入与导出CDC(中)
|
资源调度 Ubuntu Unix
05-PDI(Kettle)脚本执行
文章目录 05-PDI(Kettle)脚本执行 pan和kitchen实验背景 pan命令演示
05-PDI(Kettle)脚本执行
|
XML 存储 移动开发
02-PDI(Kettle)导入与导出(上)
文章目录 02-PDI(Kettle)导入与导出 多个excel表格数据的合并 实验步骤: 拓展 Excel介绍 基于文本的数据导入与导出
02-PDI(Kettle)导入与导出(上)
|
SQL XML 存储
02-PDI(Kettle)导入与导出(下)
文章目录 02-PDI(Kettle)导入与导出 多个excel表格数据的合并 实验步骤: 拓展 Excel介绍 基于文本的数据导入与导出
02-PDI(Kettle)导入与导出(下)