如何打印导入的java库?
是否有一种方法可以在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我认
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()
返回空数组。我会找医生的!谢谢你的帮助!