(接口源文件)怎样让Ant编译生成的字节码带实际参数信息,不是arg0之类 本帖最后由 Young_suse 于 2011-04-18 16:10:21 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我在网上找了篇帖子,说Eclipse并没有用Sun JDK的javac实现,而是用了自己实现的javac,这样就可以在编译的时候向class文件中写入参数名的信息。但是我们项目要求必须用Sun JDK1.5啊,有没有什么办法? 从 eclipse网站下载一个ecj-${version}.jar 来编译代码就是了,而且可以在ant中使用。 huntor的办法好。不过我还是保守,我觉得这里正是用javadoc的地方。 谢谢huntor的推荐,回头去研究下ecj-${version}.jar,只是项目组为了避免风险,要求必须用Sun JDK编译,现在这个问题也只能放放了 <javac srcdir="${dir.sources}" destdir="${dir.classes}" classpathref="project.classpath" includeantruntime="false" source="1.6" target="1.6" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"> <compilerclasspath> <pathelement path="${dir.library}/ecj-3.6.2.jar"/> </compilerclasspath> 刚才试了下你的办法,下了ecj-3.6.2.jar,还是只能解决类编译读出实际参数名,而接口编译后,参数仍然是arg0,arg1.后来我了解了javac命令和下字节码的知识。分析如下:Ant的debug和debuglevel参数会去调用JDK的javac -g参数, 而-g参数又包含3个选项, -g:{lines,vars,source},分别代表编译时向字节码中写入行号、方法局部变量信息、关联源代码信息。这里主要说说-g:vars选项,它会向class文件中写入方法的局部变量信息,方法参数也算是局部变量,所以方法的参数名可以被记录。但是对于接口,接口并没有方法体(只有方法声明),所以就不存在局部变量,也就没办法记录方法的参数名。所以,我们用javac -g参数或者用Ant的<javac debug="on"/>编译类可以读出方法参数名,而编译接口就不能读出,仍然是arg0,arg1的形式。要想让接口也能读出方法参数名,唯一的办法就是为class文件关联源代码了。 没明白构造器和构造器方法是什么东西 那个高手前辈帮我看看~急!!!!!在线等! 探讨JAVA对图片的处理问题 请教连接远程ORACLE数据库? 怎么样截取字符才能使中英文混合的字符不出现乱码? 页面间的相互调用的问题 请高手帮我解答些问题,一原代码中有些不明白 最近读tij4,遇到点问题,上来求解,希望得到达人的回答!!(关于多态这章) 接口问题?exitItem.addActionListener(new ActionListener(){}) ????? SimpleDateFormat解析日期时间问题 <input type=text>回车触发事件在哪里更改
但是我们项目要求必须用Sun JDK1.5啊,有没有什么办法?
不过我还是保守,我觉得这里正是用javadoc的地方。
destdir="${dir.classes}"
classpathref="project.classpath"
includeantruntime="false"
source="1.6"
target="1.6"
compiler="org.eclipse.jdt.core.JDTCompilerAdapter">
<compilerclasspath>
<pathelement path="${dir.library}/ecj-3.6.2.jar"/>
</compilerclasspath>
刚才试了下你的办法,下了ecj-3.6.2.jar,还是只能解决类编译读出实际参数名,而接口编译后,参数仍然是arg0,arg1.后来我了解了javac命令和下字节码的知识。分析如下:Ant的debug和debuglevel参数会去调用JDK的javac -g参数, 而-g参数又包含3个选项, -g:{lines,vars,source},分别代表编译时向字节码中写入行号、方法局部变量信息、关联源代码信息。这里主要说说-g:vars选项,它会向class文件中写入方法的局部变量信息,方法参数也算是局部变量,所以方法的参数名可以被记录。但是对于接口,接口并没有方法体(只有方法声明),所以就不存在局部变量,也就没办法记录方法的参数名。所以,我们用javac -g参数或者用Ant的<javac debug="on"/>编译类可以读出方法参数名,而编译接口就不能读出,仍然是arg0,arg1的形式。要想让接口也能读出方法参数名,唯一的办法就是为class文件关联源代码了。