【问题标题】:Ignoring Compilation errors - Java忽略编译错误 - Java
【发布时间】:2011-11-27 06:20:10
【问题描述】:

我有大约 1500 个文件要编译,其中 15-20 个文件有编译错误。这些文件不在我的控制之下,所以我无法进行任何修改/更新/删除。所以,我有两个问题。

1) 我如何忽略这 15-20 个文件中的编译错误并继续为其余文件生成 .class 文件。是否有任何 javac 命令行选项或任何会忽略编译错误并为所有其他非错误文件生成 .class 文件的东西。

2)Java 编译器会在看到这些错误后立即中止编译,还是会继续编译(生成 .class 文件)其他所有内容,最后抱怨这些文件有错误。

【问题讨论】:

标签: java command


【解决方案1】:

您可以使用Eclipse。它的内部编译器 - 至少在某些情况下 - 能够继续构建的其余部分,即使某些类没有完全编译。如果可能,它甚至会为损坏的类生成类文件,生成在调用它们时立即抛出异常的方法。

我会强烈建议您简单地复制所有源代码并至少在您自己的副本中尽早修复错误,但 Eclipse 的部分编译可能 帮助你。

【讨论】:

    【解决方案2】:

    您不能忽略编译错误。他们总是会失败构建。

    您唯一的选择是与控制文件的人交谈以修复它们或找到以其他方式替换它们的方法。

    如果您尝试从构建中删除它们,您还必须删除使用这些文件的所有文件。例如

    class A {
        B b;
    }
    

    如果 B 有编译错误,你的构建脚本可以跳过 B.java,但是当你点击 A.java 时,它还是会尝试编译 B,所以必须删除 A。这可能被证明是一项不平凡的任务。

    【讨论】:

    • 您好 Glowcoder,感谢您的快速响应。但它是否至少为其余的非错误文件生成 .class 文件
    • 好吧,假设您有 A、B 和 C。A 和 B 在上面。 C没有这样的东西。 C 应该得到一个 .class 文件,但 A 和 B 不会。
    【解决方案3】:

    您可以自己编写一个脚本来遍历您的源代码树并为每个 java 文件单独调用 javac。这样,您最终将得到正确编译的所有文件,这些文件不依赖于有错误的文件。不过,这将是一个非常缓慢的操作。我希望它比一次调用 javac 花费的时间要长 100 倍(考虑到您最终会收到大约 1500 次调用)。

    【讨论】:

    • 对为什么这被否决有任何评论吗?这种方法效果很好,我实际上在以下场景中使用它:我使用 javac 在我拥有的巨大库目录中查找我的项目代码对函数的所有依赖项。然后我让脚本构建一个 jar 文件,其中只包含我需要的类并且没有膨胀。该脚本首先尝试一次对整个项目进行 javac,如果任何地方出现错误,该脚本就会失败。然后,如果需要,它默认单独编译项目中的每个文件。结果:jar 文件包含运行项目的无错误部分所需的所有依赖项。
    【解决方案4】:

    您可以在 ant 任务中使用排除标记将某些源文件排除在编译之外。

      <target name="compile" description="Compile Java source files">
        <javac destdir="classes" classpathref="classpath">
          <src path="src"/>
          <exclude name="**/excluded_folder/**"/>
        </javac>
      </target>
    

    编辑: 但是当然,任何依赖于排除类的 java 文件也将无法编译,除非您在类路径中已经有排除文件的预编译版本。

    【讨论】:

      【解决方案5】:

      创建违规文件的模型。基本上与 C 头文件的想法相同,包括函数签名和合理的默认返回值(nullfalse0)。这将允许 javac 编译所有内容,只需确保模拟类不包含在最终发行版中,否则当它们首先出现在类路径中时,您会遇到奇怪的错误。这也适用于实现损坏的接口和从损坏的类继承。

      【讨论】:

        【解决方案6】:

        什么意思

        这将忽略编译错误并为所有其他非错误文件生成 .class 文件

        您是否意识到如果这些文件是相关的(就像在一个项​​目中一样),那么依赖的源文件也不会编译......?除了纠正编译错误并重试之外,没有办法绕过它!

        【讨论】:

        • 就我而言,我不在乎这些文件上是否有任何依赖文件
        • 你可能不在乎 - 但 Java 编译器在乎。您需要做的是: 1. 分离出编译错误的文件,以及依赖这些文件的文件 2. 对任何错误相关文件没有任何依赖关系的文件。您只能编译第二组。
        【解决方案7】:
        1. 告诉破解密码的人(当然是外交上的)尽快修复它。 Others have suggested(参见那里的第二条评论)公开这些事件(在团队/公司内),这大大减少了此类编译错误的数量
        2. 注释所有阻止代码编译的内容(假设您不需要这些部分)

        不应该处理非编译代码,而是提交它的人。如果有更多人从事该项目,每个人都必须在他的本地机器上处理同样的问题(找出它没有编译的原因,追踪错误的类,排除/注释这些类如果您的代码不依赖于它们,则重新构建等。)只有 1 个人来解决问题会更有效,其他人只需更新他的本地存储库。

        【讨论】:

        • -1 责备是行不通的。他还说大约有1500个文件
        • 抱歉,如果 blame 这个词在这里不合适(非英语母语者)。我编辑了我的答案(也可能太短了)
        猜你喜欢
        • 2018-12-12
        • 1970-01-01
        • 2017-11-04
        • 2018-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        相关资源
        最近更新 更多