2013-08-22 64 views
1

我正在爲nexus oss寫插件。我有權在創建插件時按任何名稱來調用我的課程。我是java新手,所以如果我的問題很奇怪,請原諒我。系統插件如何工作?誰實例化我的類?

如果名稱可以是任何東西,它們是如何被實例化我的課?

在我的插件類開始,如:

public class HelloWorldPlexusResource 
    extends AbstractPlexusResource 
    implements PlexusResource 

即使當我爲寫詹金斯插件我有同樣的疑問。類一開始只是想:

public class HelloWorldBuilder extends Builder 

例子:jenkins plugin

他們再次會怎麼稱呼我的課在運行時,當我的類名可以是任何東西? 系統是否掃描擴展特定類的類?如果是這樣怎麼辦?但是這也需要實例化嗎? (不確定)。

如果可能的話請直也我在這一些Java的閱讀。

+1

你在找什麼叫'Reflections'。看看http://en.wikipedia.org/wiki/Reflection_(computer_programming)當然,你需要某種約定的(例如,您的類必須有一個默認的構造函數),那麼它很容易在運行時實例化類(例如掃描一個特定的文件夾,加載所有類並實例化每個類)。關於詳細信息,我建議閱讀插件文檔。他們應該提供這些信息。 – zip

+0

@zip謝謝。是的,我通過教程去了反思,也該特定鏈接https://code.google.com/p/reflections/他們得到的所有類的方案,但也看到了這個[reflcetion](http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection)他們說「不」。學習反思後我也是同樣的問題,爲什麼它不可能 –

+0

如果你只使用內置的Java功能,有可能無法從你的包加載的所有類(如應用程序被打包在一個jar歸檔)。與詹金斯是不同的。詹金斯是一個Webarchive(戰爭檔案),在開始之前解壓。因此,您可以加載包中的所有類/資源(基本上是一個目錄)。您已經提到了第三部分庫也是可能的。只要你有類名實例化非常簡單:'Class.forName(「com.stackoverflow.examples.MyClass」)。newInstance();' – zip

回答

0

我不能給你一個具體的答案,但在其他插件等配套制度,內所有有效文件說plugins/文件夾基本上加載插件。

而且由於它是Java,我猜想filenname ==主類名