一、环境搭建及命令行编译
0.前期准备
(1)下载Kettle源代码pentaho-kettle-9.2.0.3-R
(2)下载jdk-8u202-windows-x64.exe
(3)下载 apache-maven-3.8.4-bin.zip
(4) 下载eclipse-committers-2021-09-R-win32-x86_64
说明eclipse-committers-2021-09-R-win32-x86_64需要jdk11,需要下载jdk11并将jdk11放入eclipse-committers-2021-09-R-win32-x86_64目录下,配置ini文件
1.jdk配置
(1)安装jdk-8u202-windows-x64.exe
(2)配置JAVA_HOME
JAVA_HOME=D:\Program Files\Java\jdk1.8.0_202
(3)配置Path
添加D:\Program Files\Java\jdk1.8.0_202\bin
(4)验证正确性
cmd中命令行:java -version
如果和版本号一致即表示配置正确
2.maven配置
(1)解压 apache-maven-3.8.4-bin.zip
(2)配置MAVEN_HOME
MAVEN_HOME=D:\Program Files\apache-maven-3.8.4
(3)配置Path
添加D:\Program Files\apache-maven-3.8.4\bin
(4)验证正确性
cmd中命令行:mvn -v
如果和版本号一致即表示配置正确(注意下这里显示的jdk版本是否原先配置jdk一致)
(5)配置maven中setting.xml文件
打开D:\Program Files\apache-maven-3.8.4\conf\setting.xml文件编辑
编辑节点
3.命令行编译Kettle
(1)cd到源代码目录
(2)cmd运行令
mvn clean install -Dmaven.test.skip=true
mvn clean package --settings D:\Program Files\apache-maven-3.8.4\conf\setting.xml -Dmaven.test.skip=true
说明:此步骤主要是为了下载Kettle需要的Maven包(记得需要联网)
二、使用Eclipse导入已存在的Maven项目
1.导入源代码
(1)点击eclipse-committers-2021-09-R-win32-x86_64中eclipse.exe运行IDE
(2)【File】|【Import】|【Maven】节点|【Existing Maven Projects】节点|【Next】
Root Directory 找到源代码目录进行导入(Add projects to working set默认勾选)
2.eclipse配置
(1)配置jdk
A:菜单【Window】|【Preferences】|【Java】|【Install JAREs】
add|StandarVM 找到JRE home D:\Program Files\Java\jdk1.8.0_202 进行配置,并勾选配置 的jdk
B:修改【Window】|【Preferences】|【Java】|【Complier】节点Complier compliance level为1.8版本
(2)配置maven
A:菜单【Window】|【Preferences】|【Maven】|【Installations】
点击【add】 install home 目录指向maven安装路径 D:\Program Files\apache-maven-3.8.4 。勾选这个maven配置并应用
B:菜单【Window】|【Preferences】|【Maven】|【Lifecycle Mappings】
[Change mapping file location]打开这个路径,将新的lifecycle-mapping-metadata.xm(后面会介绍这个文件)l拷贝到这个目录进行替换
C:/Users/Administrator/eclipse-workspace/.metadata/.plugins/org.eclipse.m2e.core/lifecycle-mapping-metadata.xml
C:菜单【Window】|【Preferences】|【Maven】|【User Settings】
将Global Settings,User Settings都改为你配置的Maven安装下setting.xml文件路径
如D:\Program Files\apache-maven-3.8.4\conf\setting.xml
D:勾选 菜单【Window】|【Preferences】|【Maven】下Update Maven Projects on startup 项,并Apply。
(3)重启eclipse
3.eclipse启动调试
(1)【Project Explorer】面板 右键任何以工程菜单【Maven】|【Update Project】选择所有工程更新
(2) Ctrl+Shift+R 查找Spoon.java文件并打开,在源代码中右键【Debug As】
三、编译过程中出现报错问题解决
1.修改pom.xml中swt版本信息
(1)原因
因为官方的源码在linux系统中开发的,若在windows系统或其他系统中开发时需要更换为相应的swt版本,本文在在windows环境中开发。
(2)解决办法
工作空间全文搜索“
2.配置maven的Lifecycle Mappings
(1)原因
导入maven项目后会出现很多错误,都是类似Plugin execution not covered by lifecycle configuration问题
(2)解决办法
编写新的lifecycle-mapping-metadata.xml如下。另外需要Eclipse中Maven上的配置处把“Update Maven projects on startup”选项勾上并重启Eclipse
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<goals>
<goal>create-timestamp</goal>
</goals>
<versionRange>[0.0,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<goals>
<goal>list</goal>
</goals>
<versionRange>[0.0,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.zeroturnaround</groupId>
<artifactId>jrebel-maven-plugin</artifactId>
<goals>
<goal>generate</goal>
</goals>
<versionRange>[0.0,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<goals>
<goal>compile</goal>
</goals>
<versionRange>[0.0,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<goals>
<goal>copy-dependencies</goal>
<goal>unpack</goal>
</goals>
<versionRange>[0.0,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<goals>
<goal>bundle</goal>
</goals>
<versionRange>[1.5,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<goals>
<goal>add-resource</goal>
<goal>parse-version</goal>
</goals>
<versionRange>[1.9.1,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.commonjava.maven.plugins</groupId>
<artifactId>directory-maven-plugin</artifactId>
<goals>
<goal>highest-basedir</goal>
</goals>
<versionRange>[0.1,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.pentaho.maven.plugins</groupId>
<artifactId>license-helper-maven-plugin</artifactId>
<goals>
<goal>check-license</goal>
<goal>bundle</goal>
</goals>
<versionRange>[1.5,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>com.soebes.maven.plugins</groupId>
<artifactId>iterator-maven-plugin</artifactId>
<goals>
<goal>iterator</goal>
<goal>bundle</goal>
</goals>
<versionRange>[0.4,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.hitachivantara.karaf.tooling</groupId>
<artifactId>karaf-maven-plugin</artifactId>
<goals>
<goal>verify</goal>
<goal>compile</goal>
<goal>features-generate-descriptor</goal>
</goals>
<versionRange>[4.2.6,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<goals>
<goal>replace</goal>
</goals>
<versionRange>[1.5.2,)</versionRange>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
说明:每个版本的Kettle可能配置的lifecycle-mapping-metadata.xml不同,本xml文件只针对pentaho-kettle-9.2.0.3-R版本
3.loadXul方法 org.pentaho.ui.xul.XulException: java.lang.reflect.InvocationTargetException报错的问题
(1)报错信息
General - ERROR (version Unknown,) : Error initializing transformation
General - ERROR (version Unknown, org.pentaho.ui.xul.XulException: org.pentaho.ui.xul.XulException: java.lang.reflect.InvocationTargetException
General - at org.pentaho.ui.xul.impl.AbstractXulLoader.loadXul(AbstractXulLoader.java:135)
(2)解决办法
这个问题困扰了我好几天,换了jdk版本,eclipse版本都没能正确解决问题,直到我看到这篇文章https://stackoverflow.com/questions/63343031/pentaho-error-working-with-xul-definition
这篇文章提醒了我。解决办法:将用mvn clear install命令生成的可执行的程序目录下源代码\assemblies\client\target\data-integration\libswt\win64 下的swt.jar包拷贝到(maven管理包的文件夹路径)repository\org\eclipse\swt\org.eclipse.swt.win32.win32.x86_64\4.6下,将swt.jar包命名为org.eclipse.swt.win32.win32.x86_64-4.6.jar.其实我觉得不一定要使用jdku8022版本。主要是swt.jar版本可能不正确。实在不行就用mvn clear install编译号的包中的swt.jar
4.缺少kettle-password-encoder-plugins.xml
(1)报错信息
Unable to find plugin with ID 'Kettle'. If this is a test, make sure kettle-core tests jar is a dependency. If this is live make sure a kettle-password-encoder-plugins.xml exits in the classpath at org.pentaho.di.core.encryption.Encr.init(Encr.java:61)
(2)解决办法
源码\ui\target\classes目录下添加kettle-password-encoder-plugins.xml. kettle-password-encoder-plugins.xml可以在其他目录找到(用Everything搜索下),复制到这个目录即可
5.org.pentaho.ui.xul.XulException: Can not locate Xul document [ui/spoon.xul]
解决办法:将mvn clear install 成功后的源码下\assemblies\client\target\pdi-ce-9.2.0.3-477.zip文件解压后 data-integration下的uii目录(包括文件拷贝)到 源代码\ui目录下
6.java.lang.NoClassDefFoundError: org/jaxen/JaxenException
解决办法:在kettle-engine项目下的pom.xml文件中
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
四、参考
pentaho-kettle-8.2.0.0-R源码开发环境搭建
Plugin execution not covered by lifecycle configuration错误解决方案
maven(二) maven项目构建ssh工程(父工程与子模块的拆分与聚合)
pentaho-kettle-8.2.0.0-R源码开发环境搭建
Project configuration is not up-to-date with pom.xml错误解决方法
Kettle 9.0 源码编译
Kettle8.2.0.0-R源码编译及IDEA中调试运行(完美解决版)
五、总结
(1)笔者之前没学过Java,因公司项目需要研究Kettle项目,在项目中学习Java,难免有些错误,请指正。
(2)Eclipse中些红色错误可以忽略的,不需要都解决的。
(3) 碰到Kettle问题可以到官方论坛搜索问题