如何打印导入的java库?

如何打印导入的java库?,java,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我认

是否有一种方法可以在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

我认为没有办法做到这一点。导入只是程序员的一种语法帮助,不会反映在编译的类文件中。无论如何,您需要这样的功能做什么?

如果您需要源代码中使用的实际导入(而不是使用字节码中的信息),您可以使用一个名为的库,该库将解析您的源代码,并可以获得您使用的导入列表:

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

不要认为这是可能的,因为它只是语法上的糖分,但我喜欢被证明不是这样我不知道你在找什么。“已导入(使用导入关键字)”的库可能与“在执行期间可用”的库不同。例如,您可以针对库进行编译(导入其类型),但不能在运行时将其包含在类路径中。或者,您可以向不使用的运行时类路径添加额外的JAR。另外,未使用的导入不会显示在字节码中。@martiell实际上没有任何导入显示在字节码中。@Max在某种意义上是True。我的意思是导入和使用的类的名称将出现在字节码中。这并不完全相同(因为您可能不使用导入并完全限定所有类引用),但对于Alain尝试执行的任何操作来说,这可能是一个足够好的近似值。是的!!令人惊叹的!它工作得很好。顺便说一下,我注意到了一个问题,如果我的类Main在一个包中,
getImports()
返回空数组。我会找医生的!谢谢你的帮助!