【问题标题】:How to fix an Uncommented main method?如何修复未注释的主要方法?
【发布时间】:2015-01-26 03:44:53
【问题描述】:

我一直在通过谷歌寻找这个问题,但事实证明我找不到解决这个问题的方法。实际上,我有一个经典的 main 方法来运行作业,但 sonarqube 不断重复我,发现了一个未注释的主要方法。

代码如下:

     /**
     * Main : Run MapReduce job
     * 
     * @param args
     *            arguments
     */
    public static void main(String[] args) {
        ExitManager exitManager = new ExitManager();
        // run job
        if (!runJob(args)) {
            exitManager.exit(1);
        }
    }

我在这里没有看到任何特别的问题,那么这个问题是从哪里来的呢?你知道我该如何解决这个问题吗?

谢谢。

【问题讨论】:

  • 这个主要方法是未注释的。我没有发现任何问题。
  • 没看懂,那里怎么没注释?
  • 阅读下面的答案,似乎是对“评论”一词的简单误解。像 OP 一样,我认为它的意思是该方法应该有一个注释,而不是它应该被注释掉以便它无法执行
  • @Stewart 所以你的意思是我应该在 main 方法上添加特定的 cmets 而不是注释掉它?
  • 不,CheckStyle 警报是说您根本不应该有main() 方法。显然,此警告不适用于您。

标签: java methods comments main sonarqube


【解决方案1】:

未注释的主方法 是一个 CheckStyle 警告,指出 main() 方法没有被注释掉。你的代码中不应该有调试/测试main() 方法。

您可以使用以下方式排除您的程序入口点类:

<module name="UncommentedMain">
    <property name="excludedClasses" value="\.Main$"/>
</module>

另见http://checkstyle.sourceforge.net/config_misc.html#UncommentedMain

【讨论】:

  • 所以你的意思是我应该评论所有的主要方法,所以它不能被执行?
  • 这取决于,有问题的 main() 是程序入口点还是调试方法?如果它是入口点,那么您可以将其从检查中排除,请参阅我的更新。
  • 我明白了。你把这些线放在哪里?你用的是 ant 文件还是什么?
  • @hacks4life 您通常在您的*checks.xml 文件中设置这些。对于 SonarQube,我相信您可以在“设置 -> Java -> Checkstyle”的 sonar.checkstyle.filters 配置中设置它们
  • ...或者如果这条规则真的让您感到困扰,您甚至可以从您的质量配置文件中禁用它。
【解决方案2】:

来自documentation

检查未注释的 main() 方法。

基本原理:main() 方法通常用于调试目的。调试完成后, 开发人员经常忘记删除该方法,这会更改 API 并增加 生成的类或 JAR 文件。除了真正的程序入口点,所有main() 方法应该从源代码中删除或注释掉。

【讨论】:

  • 如果我的程序真的是一个入口点并且我仍然有这个警告怎么办? :)
【解决方案3】:

您可以使用@SuppressWarnings 抑制警告:

@SuppressWarnings("uncommentedmain")
public class YourClass {
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2021-07-03
    • 1970-01-01
    • 2020-02-27
    • 2011-10-23
    相关资源
    最近更新 更多