2012-06-25 25 views
4

我正在研究一個項目,該項目需要獲取任意數量的java文件,編譯它們,將它們jar,然後運行它們。我面臨的問題是:我們運行了哪個課程?是否有可能在一組類中找到入口點?以編程方式在類集合中找到main()方法

我願意假定給定的文件只有一個入口點。

這裏是我到目前爲止認爲:

  • 添加輔助類來使用反射找到與每類主罐子()。要運行該jar,請調用該助手類。
  • 使用戶名爲他們的main()類「Main」,或者類似的東西。

有沒有一個很好的方法來解決這個問題?這個軟件是專爲學生和新手程序員準備的,所以我願意爲了簡單而犧牲健壯性。

謝謝!

+1

你可以讓它們在JAR文件中提供清單嗎? – ametren

+0

我想我可以。我只是猶豫要爲系統增加任何複雜性。想想中學生。如果沒有好的選擇,我一定會這樣做。 – beta

+0

啊,我明白了。 Manifest絕對是最好的方法,但是你在以某種方式命名主類的問題上的建議也可能幫助你教會他們的約定與配置,這是一個有用的知識。 – ametren

回答

2

我頭頂的一個想法可能是一個自定義註釋。它比命名約定更健壯一些,但比創建清單文件更容易。

喜歡的東西:

@MainClass 
public class MyClass { 
    public static void main(String [] args) { 
     // ... 
    } 
} 

你的工具可以掃描類的註釋。

+1

我會將這個想法升級到一個解決方案,在這個解決方案中,您不會讓學生編寫'public static void main' - 他們很可能不會處理命令行參數。設置任何公共無參數方法可以用@EntryPoint註釋標記的要求,並編寫自己的,具有低級入口點('public static void main')的重用類。更簡單的方法是使用該方法的命名約定,因爲使用註釋導致JAR的依賴 - 另一個障礙。 –

+0

我想我會進一步追求馬可的想法。謝謝! – beta

1

知道哪個類包含main()的最好方法是在調用主類的JAR文件中提供清單。

但是,您在關於以某種方式命名其主類的問題中的建議可能還會幫助您教會他們的約定與配置,這是一個有用的知識。