MacOS Kettle 9.1 环境搭建

MacOS Kettle 9.1 环境搭建

一、软件版本

  • MacOS:Big Sur 11.4 Core i7

  • Java:1.8_301

    https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

  • Kettle:9.1

    https://sourceforge.net/projects/pentaho/files/Data%20Integration/

  • swt:4.21M1

    https://download.eclipse.org/eclipse/downloads/drops4/S-4.21M1-202107090030/

二、安装步骤

1、安装Java

下好jdk的dmg包以后,傻瓜式安装

2、配置Java环境

以zsh为例,在 .zshrc 文件添加以下配置,同时刷新zsh配置

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH:.
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:.

在控制台中输入java -version,看到以下信息则配置完成

$ java -version
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
3、解压Kettle文件

将Kettle压缩包解压到目录

4、启动Kettle
  • 点击目录下的Data Integration.app启动

    需要解决权限问题,在控制台输入以下命令

    sudo xattr -dr com.apple.quarantine /**/data-integration/Data Integration.app
    
  • 在控制台中使用 sh spoon.sh 启动

    sh spoon.sh
    

三、启动失败问题

  • org.eclipse.swt.widgets.Control.internal_new_GC

    2021/07/27 18:42:14 - Spoon - ERROR (version 9.1.0.0-324, build 9.1.0.0-324 from 2020-09-07 05.09.05 by buildguy) : 一个未预期的错误发生在Spoon: probable cause:在停止Spoon前,请先关闭其它spoon窗口!
    2021/07/27 18:42:14 - Spoon - null
    2021/07/27 18:42:14 - Spoon - ERROR (version 9.1.0.0-324, build 9.1.0.0-324 from 2020-09-07 05.09.05 by buildguy) : java.lang.NullPointerException
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.Control.internal_new_GC(Control.java:2180)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.graphics.GC.<init>(GC.java:177)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.graphics.GC.<init>(GC.java:138)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.custom.CTabFolder.updateTabHeight(CTabFolder.java:3806)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.custom.CTabFolder.runUpdate(CTabFolder.java:3839)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.custom.CTabItem.getBounds(CTabItem.java:156)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.custom.CTabFolder.onPaint(CTabFolder.java:2076)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.custom.CTabFolder.lambda$init$0(CTabFolder.java:337)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4319)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1512)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1535)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1520)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.Control.drawWidget(Control.java:1279)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.Widget.drawRect(Widget.java:776)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.Display.windowProc(Display.java:5956)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.Display.applicationNextEventMatchingMask(Display.java:5210)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5634)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.internal.cocoa.NSApplication.nextEventMatchingMask(NSApplication.java:97)
    2021/07/27 18:42:14 - Spoon - 	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
    2021/07/27 18:42:14 - Spoon - 	at org.pentaho.di.ui.spoon.Spoon.readAndDispatch(Spoon.java:1405)
    2021/07/27 18:42:14 - Spoon - 	at org.pentaho.di.ui.spoon.Spoon.waitForDispose(Spoon.java:7989)
    2021/07/27 18:42:14 - Spoon - 	at org.pentaho.di.ui.spoon.Spoon.start(Spoon.java:9371)
    2021/07/27 18:42:14 - Spoon - 	at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:711)
    2021/07/27 18:42:14 - Spoon - 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    2021/07/27 18:42:14 - Spoon - 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    2021/07/27 18:42:14 - Spoon - 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    2021/07/27 18:42:14 - Spoon - 	at java.lang.reflect.Method.invoke(Method.java:498)
    2021/07/27 18:42:14 - Spoon - 	at org.pentaho.commons.launcher.Launcher.main(Launcher.java:92)
    java.lang.NullPointerException
    	at org.eclipse.swt.widgets.Control.internal_new_GC(Control.java:2180)
    	at org.eclipse.swt.graphics.GC.<init>(GC.java:177)
    	at org.eclipse.swt.graphics.GC.<init>(GC.java:138)
    	at org.eclipse.swt.custom.CTabFolder.updateTabHeight(CTabFolder.java:3806)
    	at org.eclipse.swt.custom.CTabFolder.runUpdate(CTabFolder.java:3839)
    	at org.eclipse.swt.custom.CTabItem.getBounds(CTabItem.java:156)
    	at org.eclipse.swt.custom.CTabFolder.onPaint(CTabFolder.java:2076)
    	at org.eclipse.swt.custom.CTabFolder.lambda$init$0(CTabFolder.java:337)
    	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4319)
    	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1512)
    	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1535)
    	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1520)
    	at org.eclipse.swt.widgets.Control.drawWidget(Control.java:1279)
    	at org.eclipse.swt.widgets.Widget.drawRect(Widget.java:776)
    	at org.eclipse.swt.widgets.Display.windowProc(Display.java:5956)
    	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
    	at org.eclipse.swt.widgets.Display.applicationNextEventMatchingMask(Display.java:5210)
    	at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5634)
    	at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
    	at org.eclipse.swt.internal.cocoa.NSApplication.nextEventMatchingMask(NSApplication.java:97)
    	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
    	at org.pentaho.di.ui.spoon.Spoon.readAndDispatch(Spoon.java:1405)
    	at org.pentaho.di.ui.spoon.Spoon.waitForDispose(Spoon.java:7989)
    	at org.pentaho.di.ui.spoon.Spoon.start(Spoon.java:9371)
    	at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:711)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.pentaho.commons.launcher.Launcher.main(Launcher.java:92)
    

    出现这种情况,需要手动下载替换swt的jar包
    请添加图片描述

    将下好的包解压,可看到以下的目录
    请添加图片描述

    然后将swt.jar替换到/data-integration/libswt/osx64目录下,即可启动Kettle

    同时可以对比下包,找下原因

    swt 4.21M1的代码
    请添加图片描述
    9.1的原始swt.jar包中的代码
    请添加图片描述
    原代码在取得graphicsContext时未做判空处理,graphicsContext.graphicsPort() 时导致运行报错

    在后续版本中已修复

  • 打开DB连接时报错

    在解决完swt的版本问题后,在使用过程中发现,打开DB连接,或者查询表时会出现以下错误

    org.pentaho.ui.xul.XulException: org.pentaho.ui.xul.XulException: java.lang.reflect.InvocationTargetException
    	at org.pentaho.ui.xul.impl.AbstractXulLoader.loadXul(AbstractXulLoader.java:135)
    	at org.pentaho.ui.xul.swt.SwtXulLoader.loadXul(SwtXulLoader.java:128)
    	at org.pentaho.ui.xul.swt.SwtXulLoader.loadXul(SwtXulLoader.java:122)
    	at org.pentaho.ui.xul.impl.AbstractXulLoader.loadXul(AbstractXulLoader.java:243)
    	at org.pentaho.ui.database.DatabaseConnectionDialog.getSwtInstance(DatabaseConnectionDialog.java:60)
    	at org.pentaho.di.ui.core.database.dialog.XulDatabaseDialog.createDialog(XulDatabaseDialog.java:163)
    	at org.pentaho.di.ui.core.database.dialog.XulDatabaseDialog.open(XulDatabaseDialog.java:115)
    	at org.pentaho.di.ui.core.database.dialog.DatabaseDialog.open(DatabaseDialog.java:61)
    	at org.pentaho.di.ui.spoon.delegates.SpoonDBDelegate.editConnection(SpoonDBDelegate.java:96)
    	at org.pentaho.di.ui.spoon.Spoon.doubleClickedInTree(Spoon.java:3160)
    	at org.pentaho.di.ui.spoon.Spoon.doubleClickedInTree(Spoon.java:3095)
    	at org.pentaho.di.ui.spoon.Spoon.access$1700(Spoon.java:373)
    	at org.pentaho.di.ui.spoon.Spoon$26.widgetDefaultSelected(Spoon.java:6375)
    	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:123)
    	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4478)
    	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1522)
    	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1545)
    	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1530)
    	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1324)
    	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4264)
    	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3837)
    	at org.pentaho.di.ui.spoon.Spoon.readAndDispatch(Spoon.java:1405)
    	at org.pentaho.di.ui.spoon.Spoon.waitForDispose(Spoon.java:7989)
    	at org.pentaho.di.ui.spoon.Spoon.start(Spoon.java:9371)
    	at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:711)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.pentaho.commons.launcher.Launcher.main(Launcher.java:92)
    Caused by: org.pentaho.ui.xul.XulException: java.lang.reflect.InvocationTargetException
    	at org.pentaho.ui.xul.impl.XulParser.getElement(XulParser.java:239)
    	at org.pentaho.ui.xul.impl.XulParser.parse(XulParser.java:164)
    	at org.pentaho.ui.xul.impl.XulParser.parse(XulParser.java:171)
    	at org.pentaho.ui.xul.impl.XulParser.parse(XulParser.java:171)
    	at org.pentaho.ui.xul.impl.XulParser.parse(XulParser.java:171)
    	at org.pentaho.ui.xul.impl.XulParser.parseDocument(XulParser.java:85)
    	at org.pentaho.ui.xul.impl.AbstractXulLoader.loadXul(AbstractXulLoader.java:127)
    	... 30 more
    Caused by: java.lang.reflect.InvocationTargetException
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    	at org.pentaho.ui.xul.impl.XulParser.getElement(XulParser.java:227)
    	... 36 more
    Caused by: java.lang.NoClassDefFoundError: org/eclipse/swt/custom/TableTreeItem
    	at org.eclipse.jface.util.OpenStrategy.initializeHandler(OpenStrategy.java:269)
    	at org.eclipse.jface.util.OpenStrategy.<init>(OpenStrategy.java:107)
    	at org.eclipse.jface.viewers.StructuredViewer.hookControl(StructuredViewer.java:1161)
    	at org.eclipse.jface.viewers.ListViewer.<init>(ListViewer.java:79)
    	at org.eclipse.jface.viewers.ListViewer.<init>(ListViewer.java:67)
    	at org.pentaho.ui.xul.swt.tags.SwtListbox.<init>(SwtListbox.java:90)
    	... 41 more
    Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.custom.TableTreeItem
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    	... 47 more
    
    

    可以看到最下方错误:找不到类 org.eclipse.swt.custom.TableTreeItem

    同样可以通过翻源码来解决

    查看4.21M1版本源码路径下的文件,发现已经没有这个类了
    请添加图片描述
    继续翻看swt的文档,在Deprecated API removals中发现,4.12版本时被移除请添加图片描述
    于是下了4.11版本的jar包替换尝试,发现graphicsContext的判空问题未被修复请添加图片描述
    但是我们可以把4.11版本内未被移除的TableTreeItem放入4.21M1的jar包中

    将相关的class文件放入jar包,重新替换后,Kettle恢复正常使用

四、数据连接问题

  • 数据库驱动缺失

    将驱动文件放在/data-integration/lib下

  • 连接SAP

    将sapjco3.jar放在/data-integration/lib下

    可以参考这篇文章:https://www.cnblogs.com/rinack/p/6866191.html

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值