如何将kettle 集成到java应用

如何将kettle 集成到java应用,第1张

在Java应用程序中调用Kettle的Transformation

package com.ggd543.kettle.trans

import org.pentaho.di.core.util.EnvUtil

import org.pentaho.di.core.KettleEnvironment

import org.pentaho.di.trans.{Trans, TransMeta}

/**

*

* User: 刘永健

* Date: 12-3-8

* Time: 下午12:14

* To change this template use File | Settings | File Templates.

*/

object TransDemo extends App {

execTrans(args(0)) // ktr文件的全路径

def execTrans(fileName: String) {

KettleEnvironment.init()

EnvUtil.environmentInit()

val transMeta = new TransMeta(fileName)

val trans = new Trans(transMeta)

trans.execute(null) // you can pass arguments instead of null

trans.waitUntilFinished()

if (trans.getErrors >0) {

throw new RuntimeException("There were errors during transformation execution")

}

}

}

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"闷段

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>kettledemo</groupId>

<artifactId>kettledemo</artifactId>

<version>1.0</version>

<dependencies>

<!-- Test -->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.8.1</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.scala-tools.testing</groupId>

<artifactId>specs_2.9.1</artifactId>

<version>1.6.9</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.scalatest</groupId>

<artifactId>scalatest_2.9.1</artifactId>

<version>1.6.1</version>

<scope>test<蚂消誉桥亩/scope>

</dependency>

<dependency>

<groupId>com.typesafe.akka</groupId>

<artifactId>akka-actor</artifactId>

<version>2.0</version>

</dependency>

<dependency>

<groupId>com.typesafe.akka</groupId>

<artifactId>akka-testkit</artifactId>

<version>2.0</version>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<configuration>

<source>1.6</source>

<target>1.6</target>

<encoding>UTF-8</encoding>

</configuration>

</plugin>

</plugins>

</build>

<profiles>

<profile>

<id>pentaho</id>

<activation>

<activeByDefault>true</activeByDefault>

</activation>

<properties>

<pentaho.kettle.version>4.2.1.1</pentaho.kettle.version>

</properties>

<dependencies>

<dependency>

<groupId>pentaho-kettle</groupId>

<artifactId>kettle-core</artifactId>

<version>${pentaho.kettle.version}</version>

</dependency>

<dependency>

<groupId>pentaho-kettle</groupId>

<artifactId>kettle-db</artifactId>

<version>${pentaho.kettle.version}</version>

</dependency>

<dependency>

<groupId>pentaho-kettle</groupId>

<artifactId>kettle-engine</artifactId>

<version>${pentaho.kettle.version}</version>

</dependency>

<dependency>

<groupId>pentaho</groupId>

<artifactId>pentaho-hdfs-vfs</artifactId>

<version>1.0.1</version>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.16</version>

</dependency>

<dependency>

<groupId>pentaho-kettle</groupId>

<artifactId>kettle-test</artifactId>

<version>${pentaho.kettle.version}</version>

<scope>test</scope>

</dependency>

</dependencies>

<repositories>

<repository>

<id>pentaho</id>

<name>Pentaho Repository</name>

<url>http://repo.pentaho.org/artifactory/pentaho/</url>

</repository>

</repositories>

</profile>

<profile>

<id>scala</id>

<activation>

<activeByDefault>true</activeByDefault>

</activation>

<properties>

<scala.version>2.9.1</scala.version>

</properties>

<repositories>

<repository>

<id>typesafe</id>

<name>Typesafe Repository</name>

<url>http://repo.typesafe.com/typesafe/releases/</url>

</repository>

</repositories>

<dependencies>

<dependency>

<groupId>org.scala-lang</groupId>

<artifactId>scala-compiler</artifactId>

<version>${scala.version}</version>

<scope>compile</scope>

</dependency>

<dependency>

<groupId>org.scala-lang</groupId>

<artifactId>scala-library</artifactId>

<version>${scala.version}</version>

</dependency>

<dependency>

<groupId>org.scala-lang</groupId>

<artifactId>scala-swing</artifactId>

<version>${scala.version}</version>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.scala-tools</groupId>

<artifactId>maven-scala-plugin</artifactId>

<executions>

<execution>

<goals>

<goal>compile</goal>

<goal>testCompile</goal>

</goals>

</execution>

</executions>

</plugin>

</plugins>

</build>

</profile>

</profiles>

</project>

1.2. 编译源码

项目加载到eclipse

将kettle项目拷贝到eclipse的workspace目录下,在eclipse中新建java project,项目名称和你拷贝过来的kettle文件夹名称一致

项目导入到eclipse中会出现一个错误,如下图,将这个文件的源码全部注芹或释掉

编译

打开build.xml, 在右边的。Outline 点击kettle->run as ->ant build

第一次编译的时候需要从网上下载几个文件,放在C:\Documents and Settings\Administrator\.subfloor,网络不好的话下载会比较慢,也可以直接文件放在C:\Documents and Settings\Administrator\下。编译完成后将bin目录下的.bat文件拷贝到Kettle目录下点击Spoon.bat运行,运行成功代表编译已近通过

用源码运行Spoon

Kettle源码工程本身可能是在linux64位机器上调试的,swt配置歼岩是linux64的库,所有在运行源码前需要修改成win32的swt,步骤如下:工程à属性àJava Build Pathàlibrariesàadd jars

然后将linux64的SWT库删除

最后打开src-uiàorg.pentaho.di.ui.spoonàSpoon.java, Run As àjava application

二.源码分析

2.1. 修改kettle界面

修改初始化界面

打开package org.pentaho.di.ui.spoon的Spoon.Java,找到main函数,该main函数为Spoon工具的入口,找到如下语句

Splash splash = new Splash(display)

该语句为spoon初始化显示的界面,跳到定义Splash.java,下面函数氏首御

canvas.addPaintListener(new PaintListener() {

publicvoid paintControl(PaintEvent e) {

String versionText = BaseMessages.getString(PKG, "SplashDialog.Version") + " " + Const.VERSION//$NON-NLS-1$ //$NON-NLS-2$

StringBuilder sb = new StringBuilder()

String line = null

try {

BufferedReader reader = new BufferedReader(newInputStreamReader(Splash.class.getClassLoader().getResourceAsStream("org/pentaho/di/ui/core/dialog/license/license.txt")))//$NON-NLS-1$

while((line = reader.readLine()) != null) {

sb.append(line + System.getProperty("line.separator"))//$NON-NLS-1$

}

} catch (Exception ex) {

sb.append("")//$NON-NLS-1$

Log.warn(BaseMessages.getString(PKG, "SplashDialog.LicenseTextNotFound"))//$NON-NLS-1$

}

String licenseText = sb.toString()

e.gc.drawImage(kettle_image, 0, 0)

// If this is a Milestone or RC release, warn the user

if (Const.RELEASE.equals(Const.ReleaseType.MILESTONE)) {

versionText = BaseMessages.getString(PKG, "SplashDialog.DeveloperRelease") + " - " + versionText//$NON-NLS-1$ //$NON-NLS-2$

drawVersionWarning(e)

} elseif (Const.RELEASE.equals(Const.ReleaseType.RELEASE_CANDIDATE)) {

versionText = BaseMessages.getString(PKG, "SplashDialog.ReleaseCandidate") + " - " + versionText//$NON-NLS-1$//$NON-NLS-2$

}

elseif (Const.RELEASE.equals(Const.ReleaseType.PREVIEW)) {

versionText = BaseMessages.getString(PKG, "SplashDialog.PreviewRelease") + " - " + versionText//$NON-NLS-1$//$NON-NLS-2$

}

elseif (Const.RELEASE.equals(Const.ReleaseType.GA)) {

versionText = BaseMessages.getString(PKG, "SplashDialog.GA") + " - " + versionText//$NON-NLS-1$//$NON-NLS-2$

}

Font verFont = new Font(e.display, "Helvetica", 11, SWT.BOLD)//$NON-NLS-1$

e.gc.setFont(verFont)

e.gc.drawText(versionText, 290, 205, true)

// try using the desired font size for the license text

int fontSize = 8

Font licFont = new Font(e.display, "Helvetica", fontSize, SWT.NORMAL)//$NON-NLS-1$

e.gc.setFont(licFont)

// if the text will not fit the allowed space

while (!willLicenseTextFit(licenseText, e.gc)) {

fontSize--

licFont = new Font(e.display, "Helvetica", fontSize, SWT.NORMAL)//$NON-NLS-1$

e.gc.setFont(licFont)

}

e.gc.drawText(licenseText, 290, 290, true)

}

})

1. 修改背景图片

找到ui/image/下面的kettle_splash.png,替换该图片

2. 修改版本信息

找到e.gc.drawText(versionText, 290, 205, true)改为e.gc.drawText("海康威视数据交换平台V1.0", 290, 205, true)

3. 修改下面的描述性文字

找到e.gc.drawText(licenseText, 290, 290, true)改为e.gc.drawText("作者:海康", 290, 290, true)

4. 预览效果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12255756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存