本文详解如何在 Kettle 中通过自定义 Java 类供 JavaScript 脚本调用。重点解决打包后类找不到或方法调用的 TypeError 问题,核心在于修正 Maven 打包结构。通过配置 spring-boot-maven-plugin 跳过重打包,确保 com 目录位于 Jar 包根路径下,从而让 Kettle 的类加载器能正确识别并执行自定义方法。
Kettle 自定义 Jar 包调用概述
本文介绍如何在 Kettle 环境中创建自定义 Jar 包,以便在 JavaScript 脚本中直接调用。文中包含详细的示例代码和操作步骤,对希望扩展 Kettle 功能的学习者和开发者具有实际参考价值。
由于 Kettle 基于 Java 开发,其内置的 JavaScript 引擎允许直接调用 Java 类的方法。利用这一特性,我们可以封装特定的业务逻辑为独立方法,供 JavaScript 脚本直接调用,从而增强数据处理能力。
Java 工具类创建与打包部署
一、在 Java 项目中创建工具类
在 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 命令进行打包。构建生成的 Jar 文件位于 target 目录下,需将其复制到 Kettle 的 lib 目录中,具体位置参考下图:

JavaScript 脚本编写与错误排查
三、编写 JavaScript 脚本
重启 Kettle 后,新建 JavaScript 脚本步骤,用于调用前述计算总页码的功能。对应的 JavaScript 代码如下:
//计算总页码
var totalPage=com.study.spring.Utils.PaginationUtils.totalPage(countBySql,pageSize);
上述代码的核心逻辑是在 JavaScript 中声明调用的 Java 类名及具体方法。
然而,在实际运行该 JavaScript 脚本时,系统会抛出如下错误信息:
不能编译 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)
从错误日志分析,Kettle 未能成功加载相关的类或方法,其表现与未放置 Jar 包时的错误类似。
Jar 包结构问题与解决方案
四、常见问题解答(FAQ)
上述错误的具体成因令人困惑。通过解压工具检查 lib 目录下的其他标准 Jar 包结构,发现其内部布局具有特定规范:

而此前手动打包生成的 Jar 包内部结构如下:

由于 com 目录未位于 Jar 包的根路径下,Kettle 的类加载机制无法定位到该方法,导致调用失败。
明确问题根源后,下面介绍具体的解决方案:
需要在 pom.xml 配置文件中添加特定插件配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
添加配置后的 pom.xml 文件效果如下所示:

重新打包后,生成的 Jar 包内部结构变为:

此时结构正确,com 目录已位于 Jar 包的根路径下。
将该 Jar 包替换至 Kettle 的 lib 目录,重启 Kettle 后,再次通过 JavaScript 调用自定义 Jar 包中的方法,即可成功执行。
以上内容为本文的全部总结,希望对读者在 Kettle 开发中有所帮助,欢迎继续支持本站获取更多信息。