eclipse编译出来的结果类文件和传统的“javac”命令是不同的。所以我想在eclipse中编译Java源代码来得到它的特殊输出。另外,这个输出只能由eclipse自己打开(至少我不知道其他的打开方式)。但是,打开这么多文件并将内容复制到记事本是一项艰巨的工作。
那么有没有其他方法可以自动读取eclipse生成的class文件呢?我猜控制台中有一些命令可以使用eclipse并自动输出结果?
谢谢。
您可以使用与使用相同的方式从命令行自己调用 Eclipse 编译器javac
:您需要ECJ
jar。例如,您可以编译一个类:
java -jar ecj-4.2.2.jar hello.java
如果您需要,这可以很容易地自动化,这里有一些关于使用 ECJ 的技巧,尤其是关于以编程方式编译和 ant 编译的技巧。
您可以使用 Eclipse 包中的编译器,或者直接从 Eclipse 下载中分离出来。在撰写本文时,当前最新版本是 4.3,ECJ 编译器可以在Eclipse 4.3.0 下载页面上找到。寻找JDT Core Batch Compiler
包裹。
从另一个答案的评论看来,您似乎需要显示编译后的字节码,您可以javap
在编译后调用:
javap -c -p -s -v hello
编辑:显示编译类
我想知道是否/如何以 Eclipse 可以显示的相同方式获取类转储。没有办法像调用 eclipse 编译器那样简单,但无论如何我通过重用 Eclipse 内部类和最小的类包装器找到了一种方法。
类转储.java
import java.io.RandomAccessFile;
import java.io.FileInputStream;
import java.io.DataInputStream;
import org.eclipse.jdt.internal.core.util.Disassembler;
import org.eclipse.jdt.core.util.ClassFormatException;
/**
* ClassDump : show a classfile dump the same way as Eclipse
*/
class ClassDump {
public static void main(String[] args){
System.out.println("Class dumper");
if(args.length != 1){
System.out.println("Usage : Disasm <file.class>");
System.exit(1);
}
new ClassDump(args[0]);
}
public ClassDump(String classfile){
byte[] classbuf = readClassBytes(classfile);
System.out.println(String.format("Class size = %d bytes", classbuf.length));
Disassembler dis = new Disassembler();
try {
System.out.print(dis.disassemble(classbuf, "\n", org.eclipse.jdt.internal.core.util.Disassembler.DETAILED));
} catch(ClassFormatException cfe){
cfe.printStackTrace();
}
}
private byte[] readClassBytes(String classfile){
byte[] buf;
try{
RandomAccessFile raf = new RandomAccessFile(classfile,"r");
FileInputStream fis = new FileInputStream(raf.getFD());
DataInputStream dis = new DataInputStream(fis);
buf = new byte[(int)raf.length()];
dis.readFully(buf);
dis.close();
fis.close();
raf.close();
} catch (Exception ex){
ex.printStackTrace();
return new byte[0];
}
return buf;
}
}
在我的本地主机上,我编译(您可能需要更改 jar 名称):
javac -cp \dev\tools\eclipse\plugins\org.eclipse.jdt.core_3.8.3.v20130121-145325.jar ClassDump.java
并且运行与 Eclipse 运行时 jar(JDT 核心、osgi、Equinox ......)有很多依赖关系,所以我通过使用通配符让 java 获取所有需要的 jar 来作弊:
java -cp .;\dev\tools\eclipse\plugins\* ClassDump SomeClass.class
它将打印与 Eclipse 类文件编辑器相同的输出...... HTH!
在您的项目目录中,导航到 /bin ,您很可能会拥有由 Eclipse 自动生成的 .class 文件。
要查看已编译类文件的 java 代码,您必须使用java 反编译器,例如这个.
-file 本身是编译的.class
二进制 Java 代码,如果在构建路径中链接了类的任何源,Eclipse 会自动查看类的源。