kettle9.0使用记录
1、版本选择
选择 7.0及以后的版本,因为7.0之前使用的是ant来管理项目,这是不利于开发的,
7.0之后用的是maven来管理项目,推荐使用
2、在github上下载源码
地址:https://github.com/pentaho/pentaho-kettle/tree/9.0
csdn:https://download.csdn.net/download/weixin_43987718/85110023
把下载下来的解压在磁盘目录之下,使用idea open该项目
3、使用idea加载项目,下载相应的jar包
需要很长的时间,耐心等待(可能几个小时,依赖要从国外下载,阿里云没有的)建议开始的时候就挂vpn
挂上vpn导入依旧是报错,jar包导入不进来
在maven的配置settring.xml中镜像中加上配置:
<mirror>
<id>nexus-pentaho</id>
<mirrorOf>central</mirrorOf>
<name>Nexus pentaho</name>
<url>https://nexus.pentaho.org/content/repositories/omni/</url>
</mirror>
加上配置后,大部分的jar包都能导入进来了
4、打包
idea打开终端,执行如下命令
mvn clean install -DskipTests
打包的时候也是需要很久的,因为他也要加载jar包,耐心等待 ,运气好点,会见到如下的场景
打包之后的jar包存放的路径
D:\IdeaProject\kettle9.0\pentaho-kettle-9.0\assemblies\client\target
5、启动项目
找到Spoon.java文件,全局搜索,可以看到这是一个很明显的启动类
点击debug模式:
应该是启动不了的,会报错
1)、报错问题1
swt相关依赖默认是linux下的,需要更改成windows下面的,64位的修改如下:
解决方案:全局搜索org.eclipse.swt.gtk.linux.x86_64,全部替换为org.eclipse.swt.win32.win32.x86_64,
注意:全部替换后会对之后的install 操作编译打包有一点点影响,导致失败。
解决方案:使用源码zip包,还原当前根项目assembles文件夹下的所有文件(其实只要还原几个xml就
好了,直接全部还原是为了省事)
2)报错2
原因:静态xul文件未找到
解决方案:找到根项目的assemblies目录下的子项目pdi-static的resources下的ui下的所有xul文件,复制至kettle-ui-swt项目相同位置
赋值文件到ui–>resource–>ui下面
3)报错3:
原因:Jaxen依赖包依赖未传递成功,找到根项目下的engine下的pom.xml,找到如下依赖,注释掉test域可见的配置,使其将依赖传递至kettle-ui-swt
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<!-- <scope>test</scope>-->
</dependency>
4)报错4
原因:在eclipse中不会出现,但在idea中出现。具体原因未知
解决方案1:手动搜索EventManager并复制至kettle-ui-swt下,包路径和jar包中的保持一致
如下图所示
代码:
package org.eclipse.core.commands.common;
import org.eclipse.core.runtime.ListenerList;
/**
* 描述
*
* @author LZH
* @version 1.0
* @date 2022/04/11 13:49:16
*/
public abstract class EventManager {
private static final Object[] EMPTY_ARRAY = new Object[0];
/**
* A collection of objects listening to changes to this manager. This
* collection is <code>null</code> if there are no listeners.
*/
private transient ListenerList listenerList = null;
/**
* Adds a listener to this manager that will be notified when this manager's
* state changes.
*
* @param listener
* The listener to be added; must not be <code>null</code>.
*/
protected synchronized final void addListenerObject(final Object listener) {
if (listenerList == null) {
listenerList = new ListenerList(ListenerList.IDENTITY);
}
listenerList.add(listener);
}
/**
* Clears all of the listeners from the listener list.
*/
protected synchronized final void clearListeners() {
if (listenerList != null) {
listenerList.clear();
}
}
/**
* Returns the listeners attached to this event manager.
*
* @return The listeners currently attached; may be empty, but never
* <code>null</code>
*/
protected final Object[] getListeners() {
final ListenerList list = listenerList;
if (list == null) {
return EMPTY_ARRAY;
}
return list.getListeners();
}
/**
* Whether one or more listeners are attached to the manager.
*
* @return <code>true</code> if listeners are attached to the manager;
* <code>false</code> otherwise.
*/
protected final boolean isListenerAttached() {
return listenerList != null;
}
/**
* Removes a listener from this manager.
*
* @param listener
* The listener to be removed; must not be <code>null</code>.
*/
protected synchronized final void removeListenerObject(final Object listener) {
if (listenerList != null) {
listenerList.remove(listener);
if (listenerList.isEmpty()) {
listenerList = null;
}
}
}
}
解决办法2:我本地解决是在仓库里面找到这个包,然后把这个包删除掉,重新加载maven依赖
5)报错5
没有日志实现
原因: log4j 和sl4j的版本不匹配,或是缺少jar包
1、查看项目中的版本
在http://mvnrepository.com/ 仓库中搜索slf4j-log4j12,可以找到匹配的版本1.7.12,点击打开
好像没有什么问题呀,版本也是一致的,再去查看是否缺少相关的jar包(应该是不缺的,不然项目会报错的),但是并不影响项目的启动
再次启动,启动成功
6、连接mysql数据库
在ui中建一个lib文件夹,文件夹中放入mysql的jar包
打开设置进行本地jar包导入项目中:
选中相应的模块,进行jar包导入
选中之后,点击确定–>apply–>ok