【问题标题】:Javac configuration parameter for unused include warnings?未使用的 Javac 配置参数包含警告?
【发布时间】:2011-07-30 07:16:17
【问题描述】:

是否有一个 Sun 命令行参数来提供有关未使用的 import 语句的警告(或错误)?嵌入式 eclipse javac 编译器提供了此类警告,但如果 Sun / Oracle 编译器将其作为其-Xlint:XXX 参数之一,则没有很好的文档记录。

我希望清理现有的 Java 代码库,该代码库是使用 Ant 从命令行构建的,并且我希望将此类语句的跟踪和报告集成到夜间构建中。

有些人认为导入对编译过程没有影响,但是查看编译器操作(使用 -verbose 标志)表明编译器无条件加载导入的类,即使它们没有在书面输出中使用。因此,删除未使用的导入似乎比一目了然的代码理解更有好处。

【问题讨论】:

    标签: java ant command-line-arguments javac


    【解决方案1】:

    使用checkstyle,并配置要使用的UnusedImports 模块(或选择已经使用它的默认配置)。

    Checkstyle 将未使用的导入定义为:

    1. 文件中未引用的非通配符导入。
    2. 与另一个导入重复的导入。
    3. java.lang 包导入。
    4. 从与类相同的包中导入。
    5. (可选)仅用于解析 JavaDoc 链接的导入。

    实际上,它会创建一个未使用java.awt.Component 的报告(连同行号)。

    import java.awt.Component;
    class FooBar {
        ...
    }
    

    它确实有一些限制,从某种意义上说,它可能会被与导入同名的成员混淆;但是,对于大多数开发人员来说,这种失败很少能付诸实践。

    关于限制的文档

    import java.awt.Component;
    class FooBar {
        private Object Component; // IMHO bad practice
        ...
    }
    

    不会Component标记为未使用。

    【讨论】:

      【解决方案2】:

      我建议您查看 FindBugs,而不是在夜间构建中报告代码的清洁度。 FindBugs 可以检测到比 JDK Java 编译器或 Eclipse 中的编译器更多的潜在问题。

      【讨论】:

      • 我并不否认 FindBugs 的好处,但如果知道如何从命令行执行此操作会很好。
      • 为什么你认为 javac 可以报告这些问题?编译器的主要工作是编译代码。如果作为编译代码的一部分方便,编译器将报告警告,但通常不会特意寻找可能导致警告的情况。这根本不是它的工作,并且会导致编译器效率降低。 Eclipse 编译器的情况是不同的。使用 IDE 的开发人员期望更多地检测潜在问题,而批处理编译中的性能并不那么重要。
      • 我认为 javac 可以报告这些问题,因为它已经有这样做的机制 javac -Xlint:xyz
      • @Paulo,您似乎忘记了源代码是由人编写和维护的。未使用的导入会扰乱人们对类是什么和不相关的看法。如果一个类有大量未使用的导入,那么这个人最终会忽略所有的导入,或者被导入误导;这两种情况都不可取。
      • @KonstantinKomissarchik 虽然 findbugs 是一个很好的测试套件,但它实际上并没有附带源代码导入测试。我想可以写一个,但我找到了一个更好的(已经写好的)解决方案。
      猜你喜欢
      • 1970-01-01
      • 2013-07-07
      • 2015-08-23
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 2021-03-12
      相关资源
      最近更新 更多