pentaho-kettle-9.2.0.3-R Window下編譯並使用Ecplise調試


一、環境搭建及命令行編譯

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文件編輯
​ 編輯節點 E:\DevOps\ETL\repository 指向(5)中目錄

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)解決辦法

​ 工作空間全文搜索“ org.eclipse.swt.gtk.linux.x86_64 ”更改為“ org.eclipse.swt.win32.win32.x86_64

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安裝與配置

Eclipse上Maven環境配置使用 (全)

Eeclipse配置maven + 創建maven項目

Eclipse配置maven環境

eclipse導入java maven項目

maven(一) maven到底是個啥玩意

maven(二) maven項目構建ssh工程(父工程與子模塊的拆分與聚合)

pentaho-kettle-8.2.0.0-R源碼開發環境搭建

eclipse導入java maven項目

Kettle導入Eclipse

超級詳細的Maven使用教程

Project configuration is not up-to-date with pom.xml錯誤解決方法

kettle9源碼編譯和調試

Kettle 9.0 源碼編譯
Kettle8.2.0.0-R源碼編譯及IDEA中調試運行(完美解決版)

五、總結

(1)筆者之前沒學過Java,因公司項目需要研究Kettle項目,在項目中學習Java,難免有些錯誤,請指正。

(2)Eclipse中些紅色錯誤可以忽略的,不需要都解決的。

(3) 碰到Kettle問題可以到官方論壇搜索問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM