idea下启动kettle9.0源码

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

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
回答: 根据引用\[1\]中的解决方案,如果你遇到了在安装操作编译打包时出现失败的问题,你可以尝试全局搜索org.eclipse.swt.gtk.linux.x86_64,并将其全部替换为org.eclipse.swt.win32.win32.x86_64。然后,你可以使用源码zip包,还原当前根项目assembles文件夹下的所有文件,或者只还原几个xml文件即可。这样做可以解决问题并避免影响后续的安装操作。另外,根据引用\[2\],你可能需要在你的项目中添加jaxen依赖。最后,根据引用\[3\],如果你需要在本地安装kettle 9.0源码,你可以使用以下命令:mvn install:install-file --settings d:\settings.xml -Dpackaging=zip -DgroupId=pentaho -DartifactId=pentaho-big-data-plugin -Dversion=9.0.0.0-63 -Dfile=D:\proxool-0.9.1\lib\proxool-cglib.jar。其中,d:\settings.xml指代位于.m2目录下的settings.xml文件,Dversion是安装版本号,Dfile是待安装文件的具体位置,-Dpackaging是打包方式。希望这些信息对你有帮助。 #### 引用[.reference_title] - *1* *2* [idea启动kettle9.0源码](https://blog.csdn.net/weixin_43987718/article/details/124097828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Kettle 9.0 源码本地部署编译](https://blog.csdn.net/weixin_40479337/article/details/105262859)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值