通过Kettle自定义jar包供javascript使用

这篇文章主要介绍了通过Kettle自定义jar包供javascript使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

一、在 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 包成功!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • sql server定时作业调用Kettle job出错的快速解决方法

    错误信息: Unable to list jar files in plugin folder 'C:\Windows\system32\config\systemprofile\.kettle\plugins' Unable to get VFS File object for filename 'C:\Windows\system32\config\systemprofile\.kettle\plugins' : Could not find file with URI "C:\Window

  • 深入Spring Boot实现对Fat Jar jsp的支持

    spring boot 对于jsp支持的限制 对于jsp的支持,Spring Boot官方只支持了war的打包方式,不支持fat jar.参考官方文档: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-jsp-limitations 这里spring boot官方说是tomcat的问题,实际上是sp

  • kettle中使用js调用java类的方法

    1. 需要事先将jar包 放在kettle 的 libext 目录,kettle 在启动时会自动加载libext 目录下的所有 jar 包. 2. modified java script 步骤要选中 compatibility mode,并将 content 设置为输出的字段. 代码如下: 复制代码 代码如下: var 变量 = new Packages.包名(参数 );

  • Maven设置使用自定义的jar包到自己本地仓库

    maven设置使用自定义的jar包到自己在Maven框架里,查找依赖包的顺序: 1.先在本地仓库找,有就返回,没有继续第二步: 2.到中央仓库 http://search.maven.org/ 找,有就返回,没有继续第三步: 3.在 Maven 远程仓库搜索,远程仓库,就的自己在pom文件设置. 如何在Local Repository(本地仓库)设定自行开发的Jar包 首先,找到Local Repository(本地仓库)的位置, 默认在C:\Users\King\.m2\repository,

  • Android Studio 生成自定义jar包的步骤详解

    想要将一个项目导出为jar包,供其它项目使用,在eclipse中可以直接导出该项目为jar包,而 在AS中可以通过修改gradle才处理. 接下来就介绍下具体的步骤: 1.新建一个项目,项目名随意,eg:MakeJarApplication,在项目中新建一个module类型为android-library ,命名为testLibrary.如图: 项目结构图 2.让app依赖这个库,在app下的build.gradle文件中添加compile project(':testlibrary') dep

  • Java工具jsch.jar实现上传下载

    在做运维的时候,我们一般使用shell脚本实现文件的服务器之间定时传输,那么对于一些不会shell脚本的童鞋,就得使用万能的编程语言了,这里我们介绍一款Java操作ftp的工具,那就是jsch.jar.工具已经写好,可以根据实际情况做调整,注释很清晰.大家按需阅读: package com.wdy.tools.utils.sftputil; import java.io.File; import java.io.FileInputStream; import java.io.FileOutput

  • Android 自定义组件成JAR包的实现方法

    Android 自定义组件成JAR包的实现方法,这里对自己实现的Android View 组件进行JAR 包的处理. 在项目开发过程中,我们难免会用到自己去制作自定义的VIEW控件,之后我们别的项目如果需要的话就直接将其复制到对应的项目中使用,虽说这么做是一个解决问题的方法,但毕竟不是很好. 原因是,当我们项目积累越来越多,会发现自定义的控件越来越多,而且这些自定义的控件都是可以重复利用的,这时我们可以想想,如果把这些自定义控件都封装成一个JAR包,然后用一个项目积累起来,之后我们以后开发项目只

  • 通过Kettle自定义jar包供javascript使用

    这篇文章主要介绍了通过Kettle自定义jar包供javascript使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法.所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用. 一.在 java 项目中创建工具类 在项目中,创建 utils 工具类,比如 计算总页码 的一个方法.代码如下: public cla

  • 如何自定义redis工具jar包供其他SpringBoot项目直接使用

    注:(最终redis数据库连接信息由使用者项目模块配置提供) 一.Redis常用存储操作实现(redis-util模块,该module最后会打包成jar供其他服务使用) 1.引用相关依赖 <!-- 如果有继承父级spring-boot-starter-parent,可不用添加版本号 --> <!-- Redis缓存 [start] --> <dependency> <groupId>org.springframework.boot</groupId&g

  • spring注解在自定义jar包中无法被扫描的解决方案

    spring注解在自定义jar包中无法被扫描 前两天,一朋友在开发的时候遇到了一个问题向我求助, service服务为第三方提供的服务里面有spring注解并将service 打成jar包中,使用maven引入. 使用new可以创建,但是使用autowire无法注入提示信息如下图 报错信息 这类问题在开发中一直是我们最不愿意看到的,乍一看,感觉挺对,还挺有道理.但是就是更想要的结果对不上. 我当时给出的判断autowire的类重名导致注入失败,建议用配合使用qualifier或者 使用resou

  • Maven引用自定义jar包方式

    目录 Maven引用自定义jar包 概述 导入jar 在pom中引入依赖 加入maven-dependency-plugin插件 环境说明 自定义jar包发布到自己指定maven本地仓库 ①我要上传的jar包为:ipdatabase-1.0.jar ②找到本地安装maven ③在项目中引用 Maven引用自定义jar包 概述 在项目中用了一个在Maven中央仓库没有的第三方jar包,Maven中该如何依赖呢? 如果引入不好,启动项目时会报: java.lang.ClassNotFoundExce

  • java自定义jar包让jmeter使用的方法

    上一篇文章中,提到怎么生成jar包让jmeter使用,这次我们来试试做参数,因为发现调包的时候其实更多还是参数化,那么开始改造吧 1.在httpclientpost这个类中替换参数,且打印参数 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; impo

  • JMeter导入自定义的Jar包的详解教程

    1.简介 原计划这一篇是介绍前置处理器的基础知识的,结果由于许多小伙伴或者童鞋们在微信和博客园的短消息中留言问如何引入自己定义的Jar包呢???我一一回复告诉他们和引入插件的Jar包一样的道理,一通百通.但是感觉他们还是很迷糊很迷惘,因此在这里穿插一篇导入自定义的Jar包.还有另外一个原因就是前置处理器会用到这个自定义的Jar包. 2.环境准备 (1)Eclipse 我们要引入自定义的Jar包,所以你需要一个可以编写脚本生成Jar的工具,当然了你可以选择其他的开发工具,宏哥这里选择Eclipse

  • maven项目如何依赖自定jar包

    这篇文章主要介绍了maven项目如何依赖自定jar包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在开发中经常会出现maven项目需要依赖一个自定义jar包,但是这个jar包并没有在maven仓库中,就会出现打包时找不到jar包的问题,解决办法如下: 在这个模块中,lib下的jar包是我自己定义的,maven仓库中并没有,在pom文件中添加jar包时,做以下处理 这样打包时就能找到包的位置了 以上就是本文的全部内容,希望对大家的学习有所帮助,

  • Android Studio3.2中导出jar包的过程详解

    1.)说明. 本项目是来自github上的一个项目roottools (https://github.com/Stericson/RootTools),这里只是想本地编译后输出下jar包供自己进行使用. 2.)操作步骤. 步骤1)按之前你熟悉的方式进行开发待输出为jar的项目. 步骤2) 一般的gradle设置,比如gradle版本,android sdk的编译,目标,最小要求版本..还有compileOptions的jdk版本设置等. 步骤3)gradle中的apply plugin设置: a

  • 通过实例解析传统jar包引用方式

    一.首先编写一个工具类Hello: public class Hello { public static void say(String message) { System.out.printf("Hello %s\n", message); } } 这个类有一个对外暴露的say方法,可以用来打招呼,于是把它打成一个jar包供以后引用. 二.打jar包: javac Hello.java jar -cvf hello.jar Hello.class 三.引用jar包 Jar包的引用非常

随机推荐