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