0
我正在爲開源ETL實用程序(Pentaho數據集成)編寫一個FTP客戶端插件。默認情況下,PDI使用舊版本的Apache commons NET jar,並且我需要由較新版本提供的功能。兩個版本的Apache公共 - 使用特定的一個
我不希望通過用舊的JAR替換舊的JAR來影響Pentaho中的所有內容。是否有可能讓我們將它們放在一起,並告訴我的新代碼專門從我添加的新JAR中導入?
我正在爲開源ETL實用程序(Pentaho數據集成)編寫一個FTP客戶端插件。默認情況下,PDI使用舊版本的Apache commons NET jar,並且我需要由較新版本提供的功能。兩個版本的Apache公共 - 使用特定的一個
我不希望通過用舊的JAR替換舊的JAR來影響Pentaho中的所有內容。是否有可能讓我們將它們放在一起,並告訴我的新代碼專門從我添加的新JAR中導入?
你不能從插件代碼本身做到這一點。你只能這樣做,如果插件被加載到一個不同的類加載器中,需要將它配置爲在轉到父類加載器之前從你自己的apache commons jar加載類。
大多數應用程序服務器都這樣做:您可以添加一個lib文件夾,並在應用程序服務器自己的庫之前由您的代碼使用它。
其他應用程序服務器支持OSGi,它允許您部署同一個庫的多個版本,只要它們具有正確的MANIFEST.MF文件。在這種情況下,您可以在自己的MANIFEST.MF文件中指定需要的版本。
Pentaho Kettle顯然支持OSGi插件。
...或者您可以查看包裝PDI作爲OSGI包,並將您的代碼作爲使用PDI包的單獨包。 –
@DilumRanatunga OSGi的確是完美的解決方案,不知道Pentaho已經支持它。 – greyfairer
很好,非常感謝。 –