文档章节

Kettle自定义jar包供javascript使用

CREATE_17
 CREATE_17
发布于 01/24 23:40
字数 782
阅读 472
收藏 0

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。

本篇文章有参考自:https://www.xiaominfo.com/2019/08/13/kettle-12/

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

<!--more-->

在项目中,创建 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 包成功!


点关注,不迷路

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

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

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

本文来自: 微信公众号【大数据实战演练】。阅读更多精彩好文,欢迎关注微信公众号【大数据实战演练】。

© 著作权归作者所有

CREATE_17
粉丝 0
博文 35
码字总数 57248
作品 0
济南
程序员
私信 提问
加载中

评论(0)

Kettle发送邮箱并在正文中以表格形式展示内容[升级版]

在上一篇关于Kettle发送邮件并在正文中以表格形式展示内容的文章中,已经提到Kettle邮箱正文中支持HTML格式,要在邮箱正文中展示表格,那就行拼出HTML,然后扔到邮箱正文中. 方法就是这么简单直接...

夏一
2019/01/12
0
0
fckeditor_for_java的用法

在很多时候都需要使用网页编辑器,包括在文章发布的时候或是在表单设计的时候。下面为fckeditor的使用。 以javascript方法调用 方法(一) 将fckeditor.jar包拷贝到webroot目录下,新建一html文...

xinlll
2012/11/18
100
0
Java使用POM一JAR包的形式管理JavaScript文件-WebJars

说明:原来JS框架还可以使用POM进行管理的。WebJars是一个很神奇的东西,可以让大家以JAR包的形式来使用前端的各种框架、组件。 什么是WebJars 什么是WebJars?WebJars是将客户端(浏览器)资...

easonjim
2018/01/18
0
0
使用phoneGap开发,怎么编写自己的jar和js文件

想扩展phoneGap的功能,想自己编写jar插件包,通过js注册 在网页上使用,对于jar包的编写和js文件的编写,应该怎么写,它们和plugin是怎么去联系的?求指点。。。

song_peng
2011/09/06
2.2K
3
批处理一键打包apk时,js文件没有被打包进入

我的程序是引用了第三方jar,还用了一个library工程,我在进行一键打包之前,先把Library工程导出为一个jar包,在这个Library工程中的源码里有一个Js文件,也在这个jar包中 然后我用aapt,ja...

xzwhust
2014/12/29
172
1

没有更多内容

加载失败,请刷新页面

加载更多

佛山哪里可以开加油费发票-腾讯新闻网

佛山哪里可以开加油费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723543
7分钟前
24
0
佛山哪里可以开房租费发票-腾讯新闻网

佛山哪里可以开房租费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

16510311845
7分钟前
29
0
佛山哪里可以开劳务费发票-腾讯新闻网

佛山哪里可以开劳务费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17035270105
8分钟前
27
0
佛山哪里可以开会议费发票-腾讯新闻网

佛山哪里可以开会议费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17035270092
8分钟前
17
0
佛山哪里可以开建材发票-腾讯新闻网

佛山哪里可以开建材发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridge,...

17035270187
9分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部