1. 程式人生 > >Kettle自定義jar包供javascript使用

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


點關注,不迷路

好了各位,以上就是這篇文章的全部內容了,能看到這裡的人呀,都是人才。

白嫖不好,創作不易。各位的支援和認可,就是我創作的最大動力,我們下篇文章見!

如果本篇部落格有任何錯誤,請批評指教,不勝感激 !

相關推薦

Kettle定義jarjavascript使用

我們都知道 Kettle 是用 Java 語言開發,並且可以在 JavaScript 裡面直接呼叫 java 類方法。所以有些時候,我們可以自定義一些方法,來供 JavaScript 使用。 本篇文章有參考自:https://www.xiaominfo.com/2019/08/13/kettle-12/

Maven編譯定義jar

在實際開發過程中經常遇到需要呼叫第三方jar包的情況,這裡有兩種解決方式: 1.將第三方jar包放在lib下(之前的處理方式,不過多介紹) 2.將第三方jar包打入maven倉庫,在pom.xml加入配置即可    mvn install:install-file -

Maven本地倉庫安裝定義JAR

Apache Maven為專案構建提供了絕佳的解決方案,其本地倉庫中快取了遠端代理倉庫或中央倉庫中的資源,從而提高網路資源使用效率,很好很強大!   但是並非所有資源都可以根據GroupId、ArtifactId和Version資訊從中央或代理倉庫中獲取。例如Oracle資

Spring掃描定義jar中的Bean

在匯出jar包時:專案右鍵 -> Export -> JAR File ->在Add directory entries處打勾選中 -> finish匯出。在其它web專案中引入

eclipse匯入生成定義jar並匯入

今天用eclipse寫Android自定義控制元件,之前一直用的AndroidStudio,對eclipse開發Android不熟悉,導致花了很多時間才生成jar包並將其匯入測試程式執行成功,因此需要記下來,防止以後忘記。 將程式碼都寫完後,點選專案右鍵-Export,然後

maven中新增定義jar

引言: 在軟體專案中,Maven提供了一體化的類庫管理系統,非常實用。但是,如果新增的類庫jar在網路上無法獲取到,如何在本地按照Maven的規則新增進來呢?本文將通過一個小例子展示新增過程。 背景介紹:   一個Maven管理的Java專案,提供一個系統級別的POM

Maven定義jar

進入到jar包所在目錄,在此處開啟命令列視窗,使用如下maven命令就會生成maven倉庫中格式的jar包; mvn install:install-file -DgroupId=com.alipay -DartifactId=alipay-sdk-java -Dver

maven定義jar到本地倉庫並使用

1.首先電腦要安裝好maven環境,配置好相關環境變數2.下載或者自己打好的jar包放入倉庫某個位置,例如我要放的是test.jar 4.在jar包目錄下開啟cmd輸入: mvn install:install-file -Dfile=test.jar -DgroupId

Gradle使用mavenLocal()以及定義jar快取路徑

最近在嘗試使用gradle代替maven建立web專案在build.gradle檔案中,使用mavenLocal() 發現並不生效repositories { mavenLocal() //直接使用本地maven倉庫 maven { url "http://m

Android Studio生成定義jar

眾所周知android studio會在library所依賴的app執行或者build之後自動生成jar,路徑為build/intermediates/bundles/debug or release/classes.jar,這樣生成的jar是可以用的,但不是我們可以控制的,所以我們需要通過其他方式來解決這

Eclipse匯出包含定義類的JarUnity3D呼叫學習筆記二

在Eclipse匯出包含自定義類的Jar包供Unity3D呼叫學習筆記一 介紹了最簡單的匯出jar包的方法 現在加上一個版本號的管理,匯出帶有版本號資訊的jar包 方法很簡單,在上面匯出的最後一步的視窗中不點選Finish完成,點選Next進入下一步繼續操作 不要勾選匯出帶有

Eclipse匯出包含定義類的JarUnity3D呼叫學習筆記一

開啟Eclipse建立一個專案AndroinPlugins並標記為library專案 建立包名com.android.plugins 建立一個自定義類TestPlugins 定義一個無返回值,沒有引數的方法HelloWorld: public void HelloWorld(){

Java -cp 引入其他 jar 導致不能引入當前目錄定義

踩坑… 正在初學servlet,本來想在業務邏輯的java檔案中引入其他類,於是自定義了一個包,並在裡面聲明瞭一個類,之後在業務檔案中import 引入,然後編譯 javac -encoding utf-8 -d f:/java學習/demo3 -cp c:/t

使用fatjar來實現將包括第三方jar的項目到處成一個jar其它程序使用

選中項 text sin jar dmv padding 安裝 cli itl 一、在線安裝fat jar在線安裝步驟:eclipse菜單條 help >software updates >Search for new features to install&

maven定義jar到本地倉庫

解決 第三方 包安裝 構建 bho ins 麻煩 第三方jar包 packaging Apache Maven為項目構建提供了絕佳的解決方案,其本地倉庫中緩存了遠程代理倉庫或中央倉庫中的資源,從而提高網絡資源使用效率,很好很強大!   但是並非所有資源都可以根據GroupI

使用fpm簡單制作定義rpm

使用fpm簡單制作自定義rpm包yum -y install ruby rubygems ruby-devel本文出自 “silence” 博客,請務必保留此出處http://silencezone.blog.51cto.com/3613477/1935110使用fpm簡單制作自定義rpm包

在一個ros下怎麽使用另外一個定義ros裏的message

com doc pack .cn .html docs ssa ace hit 假設自定義消息包my_message_package https://answers.ros.org/question/206257/catkin-use-ros-message-from-an

SoapUI調用Jar

byte cep 安裝 file -- eclipse class pub instance soapui能夠使用groovy腳本,腳本中可以調用自己編寫的jar包,使用中會遇到一些問題,下面進行一些記錄 soapui調用自寫jar包 1、編寫jar代碼並調試測試成功 2

CentOS6.5系統定義RPM實踐

linux rpm包管理 定制化RPM服務第1章 RPM的原理及應用1.1 RPM介紹RPM全稱是 Red Hat Package Manager(Red Hat包管理器)。幾乎所有的 Linux 發行版本都使用這種形式的軟件包管理安裝、更新和卸載軟件。RPM是一個開放的軟件包管理系統。它工作於Red

maven添加定義jar

posit XML maven osi 放置 本機 名稱 創建 maven jar 1.搜索".m2"找到本機maven jar包的存放目錄 2.進入repository目錄,創建一個和pom.xml中的<groupId></groupId>中的內容