簡體   English   中英

Java Maven OSGi從文件系統動態加載jar並在運行時從它運行類方法

[英]Java Maven OSGi dynamic loading of jar from filesystem and running a class method from it at runtime

我有一個NetBeans OSGi maven項目,需要從另一個OSGi jar運行一個類方法,該jar文件系統在運行時加載。

我試着看一些類似的問題:

  1. 用Java動態加載模塊

  2. 從文件系統動態加載OSGi包

  3. 尋找在動態加載Jar文件中使用Apache Felix並在Java中在運行時實例化類的基本示例

  4. java:有一個框架允許動態加載和卸載jar(但不是osgi)?

  5. 如何在OSGI框架中的Runtime動態加載Java類?

但他們似乎沒有回答我如何訪問我正在加載的包中的方法。

他們似乎對如何加載捆綁包給了我一個很好的指導,但OSGi上的文檔也是如此。 我沒有找到的是如何從我安裝的包中的特定類運行特定方法。 反射似乎不起作用,我已經讀過它可能不是一個好主意,無論如何它給了我着名的ClassNotFoundException。

還有整個Manifest導入和導出,如本和其他問題所示OSGi:程序性地將導入添加到一個包

我不能使用bndtools,因為我使用netbeans,我也不確定它是否能完成這項工作。 我也不確定OSGi服務是否與它有任何關系。

在此先感謝任何幫助我不要拔頭發的人:)

所以我假設你已經加載並啟動了捆綁包。 下一步是獲取bundle的類加載器:

ClassLoader loader = bundle.adapt(BundleWiring.class).getClassLoader();

使用此類加載器,您可以按名稱加載類,並使用反射來調用該方法。

還請注意,這不是OSGi的良好架構。 如果您已經在編譯時知道另一個bundle和類,那么只需使用Import-Package並使用new實例化另一個類。

如果您在運行時不知道其他bundle和類但是可以控制所有bundle源,那么請使用服務方法。 您可以擁有捆綁包共享的公共接口。 另一個bundle可以將其功能作為OSGi服務提供,然后您可以使用共享接口綁定和訪問它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM