我有一个内容编译的Java类作为二进制文件(名为X.class
)。我们假设它里面有一些类,有一个正确的main
方法,但我不知道原始的类名(而且它不是X
)。
如何使用单个命令行使用java
运行它?
答案 0 :(得分:2)
您可以使用javap -c <filename>
获取课程的名称。从那时起,它只是贝壳游戏。这适用于OS X:
java $(javap -c File.class | head -n 2 | tail -n1 | cut -f3 -d\ )
请注意子shell中\
之后的空格 - 这需要隔离类名。
根据@ nikolay-vyahhi反馈更新:
如果您不确定类名称将出现在哪个位置(例如,当该类是否公开时未知),您可以使用tr
和grep
,如下所示:
java $(javap -c File.class | head -n2| tail -n1 | tr [:space:] \\n | grep -A1 "class\|interface" | tail -n1)
答案 1 :(得分:0)
你可以使用javap来做到这一点:
javap X.class
它将反汇编类并打印出包,受保护和公共字段和方法:
Compiled from "Test.java"
public class Test {
public Test();
public static void main(java.lang.String...);
}
然后您可以使用它来运行应用程序:
java $(javap X.class | sed -n 's/.*class \(.*\) {/\1/p')