2012-01-26 11 views
4

インポートされたライブラリを実行中にJavaコード内に印刷する方法はありますか?例えばインポートされたJavaライブラリを印刷するには?

import javax.swing.JFrame; 
public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     //some code 
    } 
} 

私はjavax.swing.JFrameを印刷する必要があります。

+0

文法的な砂糖なので、それは可能ではないと思われますが、私はそうでなければ証明されたいと思います。 :) – dacwe

+0

ここであなたが探しているものがわかりません。インポートされたライブラリ(importキーワードを使用)は、「実行中に利用可能な」ライブラリとは異なる場合があります。たとえば、ライブラリに対してコンパイルする(その型をインポートする)ことができますが、実行時にクラスパスには含めることはできません。または、使用しないランタイムクラスパスに余分なjarファイルを追加することもできます。また、未使用のインポートはバイトコードには表示されません。 –

+0

@martiell実際には、バイトコードには*輸入されません。 – bezmax

答えて

7

バイトコードの情報を使用するのではなく、ソースコードで実際に使用するインポートが必要な場合は、QDoxというライブラリを使用してソースコードを解析し、使用するインポートのリストを取得できます。

Main.java

import com.thoughtworks.qdox.JavaDocBuilder; 
import javax.swing.JFrame; 
public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     JavaDocBuilder java = new JavaDocBuilder(); 
     java.addSourceTree(new java.io.File(".")); 
     for (String i : java.getClassByName("Main").getSource().getImports()) { 
      System.out.println(i); 
     } 
    } 
} 

コンパイルして実行します。

# If you don't have wget, just download the QDox jar by hand 
wget -U "" http://repo1.maven.org/maven2/com/thoughtworks/qdox/qdox/1.12/qdox-1.12.jar 

javac -classpath qdox-1.12.jar Main.java 
java -classpath qdox-1.12.jar:. Main 

出力は次のようになります。

com.thoughtworks.qdox.JavaDocBuilder 
javax.swing.JFrame 
+0

うん!!驚くばかり!それは素晴らしい作品です。ところで、私のクラスMainがパッケージ内にあれば、 'getImports()'が空の配列を返します。ドキュメントを探します!ご協力いただきありがとうございます! –

2

私はそれを行う方法があるとは思わない。インポートはプログラマの構文上の助けに過ぎず、コンパイルされたクラスファイルには反映されません。とにかく、そのような機能が必要なのは何ですか?

関連する問題