每个成功的人背后,一定都做过勇敢而孤独的决定。
放弃不难,坚持下来才爽~
我们都知道Kettle是用java语言开发的,Java类方法可以直接用JavaScript调用。所以有时候,我们可以为JavaScript定制一些方法。
首先,在java项目中创建一个工具类
在项目中,创建utils工具类,例如计算总页数的方法。代码如下:
public class PaginationUtils {
/**
* 计算得到总页码
* @param totalRecords 总记录数
* @param pageSize 分页大小
* @return 总页码
*/
public static int
totalPage
(String totalRecords,String pageSize)
{
int totalPage=0;
try{
BigDeci***l records=new BigDeci***l(totalRecords);
BigDeci***l size=new BigDeci***l(pageSize);
BigDeci***l _tmp=records.add(size).subtract(new BigDeci***l(1));
BigDeci***l _tp=_tmp.divide(size).setScale(0,BigDeci***l.ROUND_HALF_UP);
totalPage=_tp.intValue;}catch (Exception e){
//error
}
return totalPage;
}
}
第二,部署和打包
工具方法开发完成后,可以通过mvn clean package -DskipTests命令进行打包,在目标目录下会生成一个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.Ec***Error: TypeError: Cannot call property totalPage in object [JavaPackage com.study.spring.Utils.PaginationUtils]. It is not a function, it is "object". (<cmd>#22)
根据错误信息,其实还是没有找到相关的类方法,就像没有把这个jar包…
四。常见问题解答
上面的错误是怎么回事?我也很惊讶。于是我用压缩工具查看了lib目录下的其他jar包结构,发现其他的都是这样的:
我刚才输入的jar包目录如下所示:
Com目录不在jar包的根路径中,所以自然地,你不能访问那个方法。
好了,问题的原因找到了,接下来说解决方法:
在pom.xml文件中添加:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-***ven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
添加pom文件后的效果图如下:
jar包的内部结构也是:
成功!Com目录已经在jar包的根路径中。
用kettle的lib目录替换jar包,重启Kettle,再次通过javascripts调用自定义jar包。成功!
本文来自润情无声投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/592359.html