我正在为开源 ETL 实用程序(Pentaho 数据集成)编写一个 FTP 客户端插件。PDI 默认使用旧版本的 Apache commons NET jar,我需要新版本提供的功能。
我不希望通过用新的 JAR 替换旧的 JAR 来影响 Pentaho 中的所有内容。我是否可以将它们放在一起,只告诉我的新代码从我添加的新 JAR 中专门导入?
我正在为开源 ETL 实用程序(Pentaho 数据集成)编写一个 FTP 客户端插件。PDI 默认使用旧版本的 Apache commons NET jar,我需要新版本提供的功能。
我不希望通过用新的 JAR 替换旧的 JAR 来影响 Pentaho 中的所有内容。我是否可以将它们放在一起,只告诉我的新代码从我添加的新 JAR 中专门导入?
你不能从插件代码本身做到这一点。如果插件加载到不同的类加载器中,您只能这样做,在进入父类加载器之前,需要将其配置为从您自己的 apache commons jar 加载类。
大多数应用程序服务器都这样做:您可以添加一个 lib 文件夹,您的代码将在应用程序服务器自己的库之前使用该文件夹。
其他应用程序服务器支持 OSGi,它允许您部署同一库的多个版本,前提是它们具有正确的 MANIFEST.MF 文件。在这种情况下,您可以在自己的 MANIFEST.MF 文件中指定您需要的版本。
Pentaho Kettle 显然支持 OSGi 插件。