bat执行exe程序带参数_Kettle程序入口原理解析

本文详细解析了Kettle程序启动流程,包括bat文件set-pentaho-env.bat如何设置环境变量,Spoon.bat如何查找合适的GUI库,以及程序入口Launcher类如何加载运行。批处理文件首先配置_PENTAHO_JAVA_HOME和_PENTAHO_JAVA环境变量,接着Spoon.bat确定SWT库路径并启动launcher.jar。程序入口Launcher类根据命令行参数、配置文件和系统参数加载主类org.pentaho.di.ui.spoon.Spoon并执行main方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

开源产品总是让人欢喜让人忧。 喜的是低成本,忧的是低成熟度。 所以,不少有Java基础的K友都在研究源代码。 掌控源代码,当然是最靠谱的,但对技术水平要求非常高。笔者希望通过介绍Kettle程序启动的基本原理,为源代码研究者打开一扇窗户,一窥源代码的究竟。 以下内容以Spoon为例,但原理适用于Kitchen、Pan、Carte等所有其他应用。

二、环境

硬件:处理器 Intel i7-7700HQ 2.8GHz 内存32G操作系统:Windows 7 x64 旗舰版。内部版本6.1.7601,SP1Java版本:1.8.0_181 HotSpot 64-Bit mixed mode 三、原理解析

1、批处理文件set-pentaho-env.bat

批处理文件一般不会单独执行,因为它的功能是进行环境配置。但是大多数Kettle相关的批处理都会先执行此脚本,以设置以下两个环境变量:

 _PENTAHO_JAVA_HOME

_PENTAHO_JAVA

前者是Java环境路径,一般是JDK/JRE所在绝对路径;后者表示启动Java进程需要的java.exe/javaw.exe文件所在绝对路径。由于并不确定用户到底需要使用java.exe还是javaw.exe,所以脚本单独定义了__LAUNCHER环境变量表达此选择。

脚本将按照以下顺序搜索__LAUNCHER的位置:

  • 第一个命令行参数的bin文件夹下

  • PENTAHO_JAVA_HOME环境变量的bin文件夹下

  • 当前路径下的jre/bin文件夹下

  • 当前路径下的java/bin文件夹下

  • 当前路径上级目录下的jre/bin文件夹下

  • 当前路径上级目录下的java/bin文件夹下

  • 当前路径上上级目录下的jre/bin文件夹下

  • 当前路径上上级目录下的java/bin文件夹下

  • JAVA_HOME环境变量的bin文件夹下

  • JRE_HOME环境变量的bin文件夹下

2、批处理文件Spoon.bat

首先会调用相同路径下的批处理文件set-pentaho-env.bat以设置环境变量。接下来一个重要的工作是查找合适的GUI依赖库。

由于Spoon中涉及GUI图形界面,其实现技术为SWT。而SWT的库是依赖于操作系统的,Linux、苹果os、Windows32和Windows64都需要使用不同的库,所以必须通过一定的手段找到当前JRE环境的操作系统版本。下图为批处理的主要代码:

22d5e74460c222e6f01d9506c53e40d4.png

操作系统明确后,就可以确定适当的SWT库路径,并设置到环境变量LIBSPATH中。

最后,在设置好适当的参数后,启动当前路径的launcher下JAR包launcher.jar。主要命令注释如下图:

e8c56c5234ddfd46a127a61c33b9fd42.png

有过Java编程经验的读者应该了解,Java启动JAR包的原理,是在压缩包中找到META-INF\MANIFEST.MF,并以其中指定的主类作为程序入口。下图为使用压缩解压程序打开launcher.jar看到的主要内容。

217785e27069c0e17f41a35a404b3e82.png

下图为使用记事本打开 MANIFEST.MF看到的主要内容。

b9e7ce0634e6d6aa61aa7d97c2779052.png

其中可以看出程序的入口为类:org.pentaho.commons.launcher.Launcher

3、程序入口Launcher类

程序入口org.pentaho.commons.launcher.Launcher类的代码如下图所示:

30bcac2dfa7880e1abc2076d7f51dc6b.png

主要代码解释如下:

第50行从命令行参数获取值。主要包括-main(指定主类)-lib(指定JAR包查找加载路径)-cp(类路径)

第53-59行从配置文件launcher.properties中获取参数值

第67-71行:合并所有库加载参数,设置当前线程的类加载器

第84-88行:加载配置的主类,调用其main方法

从代码上看,优先级最高的是系统参数、其次是配置文件、再其次是命令行参数。下图为kettle8.2.0.0的配置文件截图:

2b82d507a10ae299529c0a8ebf2b2ce5.png

从中可以看出,当前配置设置的主类是org.pentaho.di.ui.spoon.Spoon。所以源码研究可以从这个类的main方法开始。

四、总结

本文通过对Windows下Spoon.bat的启动过程进行分析,介绍了批处理文件的基本结构以及最终Java程序入口的查找方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值