2012-03-01 8 views
0

私はプロジェクトのすべてのクラスのリストをJavaで取得しようとしていますが、メインメソッドが配置されているクラスを識別したいと思います。実際にクラス自体のコードを見ずに、クラスがmainメソッドを実装していることを識別できる方法はありますか?クラスにメインメソッドがあるかどうかをチェックする方法はありますか?

私は以下を実装しましたが、戻り値は常にfalseです。誰がなぜこれが起こっているのか知っていますか?あなたはクラス名を持っている場合

Class<?> c = "edu.tool.parsing.A".getClass(); 
     boolean hasMain = true; 

      try { 
       c.getMethod("main", String[].class); 
       hasMain=true; 
      } catch (SecurityException e) { 
       hasMain = true; 
      } catch (NoSuchMethodException e) { 
       hasMain=false; 
      } 
+1

[Reflection](http://docs.oracle.com/javase/tutorial/reflect/)が役立つかもしれません。 –

+0

Windowsやその他のオペレーティングシステムを使用してプロジェクトで「メインメイン」を検索してみませんか?メソッド 'main' throught reflectionを探しているのはあまりにも多すぎるようです:)何か一般的なランチャーを生成するためにしばしばそれをやりたいのでない限り。 – Jerome

+0

回答のバリエーションが示すとおり、質問に文脈を含める必要があります。例えば。 _where_と_how_これらのクラスをリストしていますか? – tveon

答えて

8

Class.getClass("com.mycompany.MyClass").getMethod("main", String[].class)

または代わりにあなたがあなたのJDKのbinディレクトリに見つけることができるコマンドラインユーティリティjavapを使用することができます。

+0

パッケージとクラスで実装した場合、getCLassはArguments(String)には適用できません。ここで使用しているCLassは通常のClassオブジェクトですか? – ict1991

+0

okありがとう – ict1991

3

は、その後、あなたはmain方法を反映しようとすることができます。

トリビアル(inclomplete)アプローチ:プログラム

private static hasMainMethod(Class<?> clazz) throws Exception { 
    Method[] methods = clazz.getMethods(); 
    for (Mehthod method:methods) { 
    if (method.getName().equals("main") { 
     // Now we have to verify the method signature! 
     return true; 
    } 
    } 
    return false; 
} 
-1

IDEでプロジェクトをロードしてください(私はIDEAで作業しています)。次に、ローカル実行を追加します.IDEAは、メインメソッドですべてのクラスをリストします。

ソースがなく、jarファイルしかない場合は、プロジェクトのライブラリとしてjarファイルを追加してから、RUNを作成してください。

0

このようなクラスが複数ある場合があります。数十があるかもしれません。なぜあなたはエントリーポイントを事前に知っていないのですか? JARマニフェストのMain-Classエントリを調べる方が良いかもしれません。

関連する問題