我有一个编译的Java类的内容作为二进制文件(名为X.class
)。让我们假设它内部有一个带有适当main
方法的类,但我不知道原始类名(它不是X
)。
如何使用单个命令行在java
上运行它?
您可以使用javap -c <filename>
获取类的名称。从那时起,这只是空壳游戏。这适用于OSX:
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)
您可以使用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')