天天看點

kettle java腳本_「實戰」Kettle自定義jar包供JavaScript使用一、在 java 項目中建立工具類二、部署打包三、編寫 JavaScript 腳本四、FAQ

kettle java腳本_「實戰」Kettle自定義jar包供JavaScript使用一、在 java 項目中建立工具類二、部署打包三、編寫 JavaScript 腳本四、FAQ

每一個成功人士的背後,必定曾經做出過勇敢而又孤獨的決定。

放棄不難,但堅持很酷~

我們都知道 Kettle 是用 Java 語言開發,并且可以在 JavaScript 裡面直接調用 java 類方法。是以有些時候,我們可以自定義一些方法,來供 JavaScript 使用。

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

一、在 java 項目中建立工具類

在項目中,建立 utils 工具類,比如 計算總頁碼 的一個方法。代碼如下:

二、部署打包

工具類方法開發完畢後,可通過

mvn clean package -DskipTests

指令進行打包,在 target 目錄下,會生成一個 jar 檔案。需要将這個 jar 包放到 kettle 的 lib 目錄下。如下圖所示:

kettle java腳本_「實戰」Kettle自定義jar包供JavaScript使用一、在 java 項目中建立工具類二、部署打包三、編寫 JavaScript 腳本四、FAQ

三、編寫 JavaScript 腳本

重新開機 Kettle ,建立 JavaScript 腳本,計算總頁碼的 js 代碼如下所示:

其實就是在 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". (#22)
           

根據錯誤資訊來看,其實還是沒有找到相關類方法,和沒放這個 jar 包一樣…

四、FAQ

上面這個錯誤究竟是怎麼回事呢?我也很奇怪。于是我就用壓縮工具也看了看 lib 目錄下的其它 jar 包結構,發現人家都是這樣式的:

kettle java腳本_「實戰」Kettle自定義jar包供JavaScript使用一、在 java 項目中建立工具類二、部署打包三、編寫 JavaScript 腳本四、FAQ

而我剛才打的 jar 包目錄是這樣子的:

kettle java腳本_「實戰」Kettle自定義jar包供JavaScript使用一、在 java 項目中建立工具類二、部署打包三、編寫 JavaScript 腳本四、FAQ

com 目錄并沒有在 jar 包的根路徑下,自然是通路不到那個方法。

好,問題産生的原因找到了,然後再說一下解決辦法:

在 pom.xml 檔案中添加:

pom 檔案添加後的效果圖如下所示:

kettle java腳本_「實戰」Kettle自定義jar包供JavaScript使用一、在 java 項目中建立工具類二、部署打包三、編寫 JavaScript 腳本四、FAQ

再次打成的 jar 包内部結構為:

kettle java腳本_「實戰」Kettle自定義jar包供JavaScript使用一、在 java 項目中建立工具類二、部署打包三、編寫 JavaScript 腳本四、FAQ

成功!com 目錄已經在 jar 包的根路徑下了。

将 jar 包替換到 kettle 的 lib 目錄下,重新開機 Kettle ,再次通過 javascripts 調用自定義 jar 包成功!