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 目录下。如下图所示:

三、编写 JavaScript 脚本

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

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

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

但是问题来了,kettle 在运行这段 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)

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

四、FAQ

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

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

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

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

在 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 文件添加后的效果图如下所示:

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

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

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


点关注,不迷路

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

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

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

原文地址:https://www.cnblogs.com/createboke/p/12232680.html

时间: 2024-07-30 04:51:05

Kettle自定义jar包供javascript使用的相关文章

java自定义jar包读取Excel(包含2003和2007)数据,并举例说明

用java自定义jar包读取excel数据支持excel2007和excel2003 在http://download.csdn.net/detail/u010792467/8079355下载所需要的包 如果需要excel2003和excel2007文件可以去 http://download.csdn.net/detail/u010792467/8072009下载 在http://download.csdn.net/detail/u010792467/8079345下载工程 自定义jar包运用举

user libary 自定义jar包库

这里讲解如何来建立一个user  libary 下面实际的进行引入jar包! 点击项目右键点击properties在左侧的导航中点击Java build path 在上面的导航条中有一个libary点击后中间的面板会出现一些你没有eclipse中自带的jar包库,点击右侧出现的按钮add libary 出现另外一个框 点击user libary 点击下面的next按钮出现 这里值讲述一下自定义jar包库 这里我们用的是 user libary,是将我们的jar包引入放在我们的myeclipse中

Android 将Activity及其他类打包成jar包供第三方调用

在开发java工程时,一个项目可能分为多个模块,为了实现模块间的解耦和独立,提高模块的复用性,通常将项目按模块分为多个java工程进行开发,最后通过jar包等工程依赖的方式实现系统集成,提高模块的耦合和复用. 现在开发Android项目通过实践和总结,发现这种方式特别有必要,比如开发一个android端的视频播放功能,肯定有播放和下载模块,如果不分开放在一个工程里面不断的添加新的功能,产品的每一个研发都不断的添加修改功能,最后维护越来越难,bug越来越多,并相互推诿,这种方式能避免这种情况,此为

流量汇总(自定义jar包,在hadoop集群上 统计,排序,分组)之统计

小知识点: half:关机 yarn端口:8088 删除hdfs目录:hadoop fs -rm -r /wc/output namenode两个状态都是standby原因:zookeeper没有比hdfs先启动 现在来做一个流量统计的例子: 首先数据是这样一张表:见附件 统计:(代码) 1,flowbean: package cn.itcast.hadoop.mr.flowsum; import java.io.DataInput; import java.io.DataOutput; imp

PySpark调用自定义jar包

在开发PySpark程序时通常会需要用到Java的对象,而PySpark本身也是建立在Java API之上,通过Py4j来创建JavaSparkContext. 这里有几点是需要注意的 1. Py4j只运行在driver 也就是说worker目前来说引入不了第三方的jar包.因为worker结点的PySpark是没有启动Py4j的通信进程的,相应的jar包自然也加载不了.之前没有详细看这部分文档,系统设计时企图在worker结点利用client模式直连Hbase来获取部分数据,从而避免对整个表的

Android 将Activity打成jar包 供第三方使用 彻底解决XML 图片 文字资源不可悲打入到jar包的问题!

做项目需要将程序打包成jar文件供第三方使用项目要求(将图片 文字资源写到到jar包中,第三方调用时,仅需要在AndroidManifest.xml配置下相应的Activity通过StartActivity方式拉起Activity):在网上找了好久,并依靠查看Android源码最终解决了问题 一:需要明白知识: 1.APK中的Res目录无法通过Eclipse的Export方式导入到jar包中 而Assert可以 2.Android程序在编译成APK时需要通过aapt将Res目录下的资源生成对应的

使用fatjar来实现将包含第三方jar包的项目到处成一个jar包供其他程序使用

一.在线安装fat jar 在线安装步骤: eclipse菜单栏 help >software updates >Search for new features to install>new update site> 填写name 和url name:任意起个, 就写fat吧 url:这个是fat jar的地址  输入http://kurucz-grafika.de/fatjar 二.fat-jar的使用 1.第一步,选中项目根节点后,点击右键,在弹出菜单中选择Build Fat

Android Studio生成自定义jar包(by 星空武哥)

    转载请标注原创地址:http://blog.csdn.net/lsyz0021/article/details/52162414 众所周知android studio会在library所依赖的app运行或者build之后自动生成jar,路径为build/intermediates/bundles/debug or release/classes.jar,这样生成的jar是可以用的,但不是我们可以控制的,所以我们需要通过其他方式来解决这个问题. 首先我们新建一个project然后再新建一个

带有res资源文件的项目 需要导成jar包 供别人使用的解决方法

比如说自己的成品项目,名字是MyObject,需要导出成jar包,让别人的项目调用,但是自己的项目还包含有图片.layout布局.libs里面的依赖包等等: 步骤: 1.MyObject项目需要“is library”一下,当做一个类库.(项目右键-Properties-Android页面下部Library部分选中“Is Library”,点击ok就行了) 2.新建一个项目,名称随意,我起名字叫MyLib,packageName一定要和MyObject项目一样.然后也是“is library”一