Kettle自定义jar包供javascript使用

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。
本篇文章有参考自:https://www.xiaominfo.com/2019/08/13/kettle-12/

一、在 java 项目中创建工具类

在项目中,创建 utils 工具类,比如 计算总页码 的一个方法。代码如下:

public class PaginationUtils {

  /**
   * 计算得到总页码
   * @param totalRecords 总记录数
   * @param pageSize 分页大小
   * @return 总页码
   */
  public static int totalPage(String totalRecords,String pageSize){
    int totalPage=0;
    try{
      BigDecimal records=new BigDecimal(totalRecords);
      BigDecimal size=new BigDecimal(pageSize);
      BigDecimal _tmp=records.add(size).subtract(new BigDecimal(1));
      BigDecimal _tp=_tmp.divide(size).setScale(0,BigDecimal.ROUND_HALF_UP);
      totalPage=_tp.intValue();
    }catch (Exception e){
      //error
    }
    return totalPage;
  }
}

二、部署打包

工具类方法开发完毕后,可通过 mvn clean package -DskipTests 命令进行打包,在 target 目录下,会生成一个 jar 文件。需要将这个 jar 包放到 kettle 的 lib 目录下。如下图所示:

Kettle自定义jar包供javascript使用

三、编写 JavaScript 脚本

重启 Kettle ,新建 JavaScript 脚本,计算总页码的 js 代码如下所示:

//计算总页码
var totalPage=com.study.spring.Utils.PaginationUtils.totalPage(countBySql,pageSize);

其实就是在 js 代码中声明 java 类+方法。

但是问题来了,kettle 在运行这段 JavaScript 脚本的时候,提示下面这样的错误:

&#x4E0D;&#x80FD;&#x7F16;&#x8BD1; javascript: org.mozilla.javascript.EcmaError: TypeError: Cannot call property totalPage in object [JavaPackage com.study.spring.Utils.PaginationUtils]. It is not a function, it is "object". (<cmd>#22)
</cmd>

根据错误信息来看,其实还是没有找到相关类方法,和没放这个 jar 包一样…

四、FAQ

上面这个错误究竟是怎么回事呢?我也很奇怪。于是我就用压缩工具也看了看 lib 目录下的其它 jar 包结构,发现人家都是这样式的:

Kettle自定义jar包供javascript使用

而我刚才打的 jar 包目录是这样子的:

Kettle自定义jar包供javascript使用

com 目录并没有在 jar 包的根路径下,自然是访问不到那个方法。

好,问题产生的原因找到了,然后再说一下解决办法:

在 pom.xml 文件中添加:


            org.springframework.boot
            spring-boot-maven-plugin

                true

pom 文件添加后的效果图如下所示:

Kettle自定义jar包供javascript使用

再次打成的 jar 包内部结构为:

Kettle自定义jar包供javascript使用

成功!com 目录已经在 jar 包的根路径下了。

将 jar 包替换到 kettle 的 lib 目录下,重启 Kettle ,再次通过 javascripts 调用自定义 jar 包成功!

点关注,不迷路

好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是 人才

白嫖不好,创作不易。各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

如果本篇博客有任何错误,请批评指教,不胜感激 !

Kettle自定义jar包供javascript使用

Original: https://www.cnblogs.com/createboke/p/12232680.html
Author: CREATE_17
Title: Kettle自定义jar包供javascript使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713768/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 结合 Vuex 和 Pinia 做一个适合自己的状态管理 nf-state

    一开始学习了一下 Vuex,感觉比较冗余,就自己做了一个轻量级的状态管理。后来又学习了 Pinia,于是参考 Pinia 改进了一下自己的状态管理。 结合 Vuex 和 Pinia…

    技术杂谈 2023年5月31日
    093
  • XCTF pwn新手区解题记录

    一、前言 闲来无事,刷刷ctf题 二、题目: level0 1、下载好题目后,拖入到kali中去,用 file 和 checksec 查看一下,可以发现该程序是 64&#x…

    技术杂谈 2023年7月11日
    063
  • Python3中datetime不同时区转换介绍与踩坑

    最近的项目需要根据用户所属时区制定一些特定策略,学习、应用了若干python3的时区转换相关知识,这里整理一部分记录下来。 下面涉及的几个概念及知识点: GMT时间:Greenwi…

    技术杂谈 2023年6月21日
    065
  • 基本数据类型的长度

    32位机器和64位机器中int、char等数据类型所占字节长度对比。 在32位机器和64机器中int类型都占用4个字节。编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:s…

    技术杂谈 2023年7月11日
    074
  • Postfix邮件发送小问题总结

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/kerrycode/p/15321413.htmlAut…

    技术杂谈 2023年5月31日
    077
  • 最长公共子序列

    很久之前就有研究这个算法 结果忘记上传了 哈哈 前天看到好多同学需要这个算法 所以 来吧 写一写 先来看下 什么是公共子序列 我直接来一张图 相信大家就明白了 当然 图片是百度到的…

    技术杂谈 2023年7月23日
    071
  • JSON和JS对象之间的互转

    1. jQuery插件支持的转换方式 $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象…

    技术杂谈 2023年5月30日
    076
  • 设计模式 20 观察者模式

    观察者模式(Observer Pattern)属于 行为型模式 在 Java 中,一个对象的状态发生改变,就可能会影响到其他的对象,与之相关的对象可能也会联动的进行改变。 比如监听…

    技术杂谈 2023年7月25日
    065
  • iPhone设置微信Callkit

    国内的苹果手机的微信接听没有提醒,主要原因是出于种种原因微信限制了Callkit。如果想要锁屏接听,像接电话一样。方式一是更换绑定境外的手机号。这里使用Google Voice的虚…

    技术杂谈 2023年6月1日
    0191
  • 23种设计模式之访问者模式(Visitor Pattern)

    文章目录 概述 访问者模式的优缺点 访问者模式的使用场景 访问者模式的结构和实现 * 模式结构 模式实现 总结 概述 访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可…

    技术杂谈 2023年7月24日
    063
  • gin protobuf客户端测试

    gin protobuf客户端测试 gin protobuf客户端测试 // clientGIN project main.go package main import ( &qu…

    技术杂谈 2023年5月30日
    069
  • 【cartogarpher_ros】二:官方Demo的介绍与演示

    上一节我们介绍了在linux中快速安装集成ros环境的cartographer。 本节我们会来跑一些官方demo,用于测试cartographer是否正确安装,顺便看看cartog…

    技术杂谈 2023年7月24日
    067
  • 【Python+Selenium】 实现对excel文件的读写操作,轻轻松松一步到位

    前言 利用selenium在做自动化测试的时候,经常会用到数据来做批量测试,常用的方式有读取txt文件,xml文件,csv文件以及excel文 件几种。 使用 excel 来做数据…

    技术杂谈 2023年6月21日
    088
  • Game Engine Architecture 12

    【 Game Engine Architecture 12】 1、the field of physics is vast, and what most of today&#821…

    技术杂谈 2023年5月31日
    0104
  • 设计模式-抽象工厂模式

    类型:创建型 目的:实现对客户端中 对象族的平替。 对象族具有共同主题的一组对象的集合。比如,华为的手机,笔记本,平板可以统称为华为族。 我们借以下案例来说说如何使用抽象工厂模式平…

    技术杂谈 2023年7月11日
    069
  • 八、变量与常量

    一、变量 1.1、变量的基本概念 Java是一种强类型语言,每个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域。 type varN…

    技术杂谈 2023年6月21日
    093
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球