一、環境搭建及命令行編譯
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問題可以到官方論壇搜索問題