我正在使用 javac 编译器,我发现它会根据作为参数传递的源文件的顺序生成不同的结果二进制 .class 文件。事实上,这是使用 ANT 或 MAVEN 进行编译的问题,因为它们对文件的排序不同。
两次编译之间存在差异。我反汇编了代码,发现 javac(优化器?)正在从其中一个编译中删除已弃用的 java jsr/ret 汇编指令。
我想知道这种行为是否是“隐式”编译的结果: http://docs.oracle.com/javase/1.5.0/docs/tooldocs/solaris/javac.html#searching
谁能解释一下这种行为?
如何在 ANT 和 MAVEN 中生成“幂等”编译过程,其中传递给编译器的源文件的顺序并不重要?
最佳答案
您可以获取源列表,然后按字母顺序对其进行排序,包括完整路径。这将使运行之间保持一致。
关于java 汇编的二进制文件根据源文件的顺序而变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9895463/