我有大约1500个文件要编译,其中15-20个文件有编译错误。这些文件不在我的控制之下,所以我无法进行任何修改/更新/删除。所以,我在这里有两个问题。
1)如何忽略这些15-20文件中的编译错误,并继续为其余文件生成.class文件。是否有任何javac命令行选项或任何会忽略compliation错误并为所有其他非错误文件生成.class文件。
2)java编译器会在看到这些错误后立即中止编译,还是会继续编译(生成.class文件)其他所有内容,最后会抱怨这些文件有错误。
答案 0 :(得分:14)
您可以使用Eclipse。它的内部编译器 - 至少在某些情况下 - 能够继续使用其余的构建,即使某些类没有完全编译。如果可能的话,它甚至会为破碎的类生成类文件,生成一旦被调用就抛出异常的方法。
我强烈建议您尽可能早地复制所有源代码并至少在您自己的副本中修复错误,但Eclipse的部分编译可能帮助你。
答案 1 :(得分:3)
您无法忽略编译错误。他们总是会失败。
您唯一的选择是与控制文件的人交谈以修复它们或找到替代它们的方法。
如果您尝试从构建中删除它们,则还必须删除使用这些文件的所有文件。例如
class A {
B b;
}
如果B有编译错误,你的构建脚本可以跳过B.java,但是当你点击A.java时,它会尝试编译B,所以必须删除A.这可能被证明是一项非常重要的任务。
答案 2 :(得分:2)
您可以自己编写一个遍历源代码树的脚本,并为每个java文件单独调用javac。这样,您将最终得到正确编译的所有文件,这些文件不依赖于有错误的文件。不过,这将是一个非常缓慢的操作。我希望它比单次调用javac要长几百倍(考虑到最终会有大约1500次调用)。
答案 3 :(得分:1)
您可以在ant任务中使用exclude标记排除某些源文件。
<target name="compile" description="Compile Java source files">
<javac destdir="classes" classpathref="classpath">
<src path="src"/>
<exclude name="**/excluded_folder/**"/>
</javac>
</target>
编辑: 但是,除非您已经在类路径中预先编译了排除文件版本,否则任何依赖于排除类的java文件都将无法编译。
答案 4 :(得分:1)
创建有问题的文件的模型。基本上与C头文件相同的想法包括函数签名和合理的默认返回值(null
,false
,0
)。这将允许javac编译所有内容,只是确保模拟类没有包含在最终发行版中,或者当它们最终在类路径中结束时你会有奇怪的错误。这适用于实现损坏的接口并从破坏的类继承。
答案 5 :(得分:-1)
你是什么意思
将忽略compliation错误并为所有其他非错误文件生成.class文件
你是否意识到如果这些文件是相关的(就像在一个项目中一样)那么依赖源文件也不会编译......?除了纠正编译错误并重试之外,没有办法绕过它!
答案 6 :(得分:-3)
你不应该处理非编译代码,而是处理它的人。如果有更多人在该项目上工作,每个人必须在他的本地机器上处理同样的问题(找出它没有编译的原因,追踪错误的类,排除/评论这些类如果你的代码不依赖于它们,重建等等。)只有一个人来修复问题会更有效率,而其他人只是更新他的本地存储库。