如何从已编译的类中获取javac标志

时间:2014-01-21 09:09:34

标签: java javac

是否有可能获得在编译类时设置的javac标志?我的意思是我有一个第三方库,我无法在Eclipse中调试它的类,因为 line:not available

我想看看编译库时使用了什么标志。 Here是我遇到的类似问题。它的作者写道:

  

查看javac编译标志,我看到-g:none标志。

那么可以看到那些旗帜吗?

1 个答案:

答案 0 :(得分:2)

您可以使用javap util执行此操作。使用-v标志运行它。如果使用-g:source选项编译src,javap将在输出的第一行打印文件路径

Classfile /D:/workspace/x/target/classes/test/Test2.class
...

如果使用了-g:vars,那么您将在LocalVariableTable

中看到var名称
  LocalVariableTable:
    Start  Length  Slot  Name   Signature
           0      31     0  args   [Ljava/lang/String;
  ...

如果使用-g:lines,则javap将打印LineNumberTable

LineNumberTable:
 line 12: 0
 ...

您还可以使用例如BCEL编程来阅读这些内容:

    JavaClass jc = Repository.lookupClass(Test2.class);
    String sf = jc.getSourceFileName();
    Method m = jc.getMethods()[0];
    LineNumberTable ln = m.getLineNumberTable();
    LocalVariableTable lvt = m.getLocalVariableTable();