eclipse编译的结果类文件与传统的“javac”命令不同。所以我想在eclipse中编译Java源代码以获得它的特殊输出。此外,此输出只能由eclipse本身打开(至少我不知道打开它的其他方法)。但是,打开这么多文件并将内容复制到记事本是一项艰巨的工作。
那么有没有其他方法可以自动读取eclipse生成的类文件?我想在控制台中有一些命令可以使用eclipse并自动输出结果吗?
感谢。
答案 0 :(得分:2)
您可以使用与javac
相同的方式从命令行自己调用Eclipse编译器:您需要ECJ
jar。例如,您可以使用以下命令编译类
java -jar ecj-4.2.2.jar hello.java
如果需要,这可以很容易地自动化,有一些关于使用ECJ的提示,特别是在this page上以编程方式和蚂蚁编译进行编译。
您可以使用eclipse包中的编译器,或直接将其与Eclipse下载分开。在撰写本文时,当前的最新版本是4.3,并且可以在Eclipse 4.3.0 download page上找到ECJ编译器。查找JDT Core Batch Compiler
包。
从另一个答案的评论中,似乎你需要显示已编译的字节码,你可以在编译后调用javap
:
javap -c -p -s -v hello
编辑:显示已编译的课程
我想知道是否/如何以Eclipse可以显示的方式获取类转储。没有办法像调用eclipse编译器一样容易,但我总是通过将Eclipse内部类与最小类包装器一起重用来找到一个意思。
<强> ClassDump.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 clas文件编辑器相同的输出... HTH!
答案 1 :(得分:0)
在项目目录中,导航到/ bin,在那里你很可能拥有Eclipse自动生成的.class文件。
要查看已编译类文件的java代码,您必须使用java decompiler, such as this one。
.class
- 文件本身是编译的二进制Java代码,如果在构建路径中链接了该类的任何源,则Eclipse会自动查看该类的源。