当前位置: 首页 > 知识库问答 >
问题:

在checkstyle中运行自定义检查需要帮助

任元青
2023-03-14

我想在java程序samples/test.java上运行一个用checkstyle实现的简单自定义检查。我遇到了下面的错误。

com.puppycrawl.tools.checkstyle.api.CheckstyleException: cannot initialize module TreeWalker - Unable to instantiate 'com.checkstyle.checks.IllegalExceptionThrowsCheck' class, it is also not possible to instantiate it as null.

请原谅,尽管这个错误是有道理的,但我无法在修复上取得任何进展。我已经在帖子的末尾贴出了完整的错误。下面是自定义检查的实现。IllegalExceptionThrowscheck.java

package com.checkstyle.checks;

import java.util.Arrays;
import java.util.List;

import com.puppycrawl.tools.checkstyle.api.Check;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.TokenTypes;

public final class IllegalExceptionThrowsCheck extends Check {

    List<String> illegalExceptionThrows;

    /** {@inheritDoc} */
    public int[] getDefaultTokens() {
       return new int[] { TokenTypes.LITERAL_THROWS };
    }

    /** {@inheritDoc} */
    public int[] getRequiredTokens() {
       return getDefaultTokens();
    }

    /** {@inheritDoc} */
   public void visitToken(DetailAST aDetailAST) {
      DetailAST identDetailAST = aDetailAST.findFirstToken(TokenTypes.IDENT);
      if (identDetailAST == null) {
         return;
      }
      if (illegalExceptionThrows.contains(identDetailAST.getText())) {
           log(aDetailAST, "Illegal Throws Clause  -> "
                + identDetailAST.getText());
      }
  }

  public void setIllegalExceptionThrows(String illegalExceptionThrowsStr) {
      this.illegalExceptionThrows =   Arrays.asList(illegalExceptionThrowsStr
            .split(","));
   }
}

checkstyle配置为custom-checkStyle.xml

   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
   <module name="Checker">
       <property name="severity" value="error" />
       <module name="TreeWalker">
        <property name="severity" value="error" />
        <module name="com.checkstyle.checks.IllegalExceptionThrowsCheck">
            <property name="severity" value="error" />
            <property name="illegalExceptionThrows" value="Exception" />
        </module>
       </module>
   </module>

包结构为

Project
 |
 |->src
 |   |
 |   |->com
 |      |
 |      |->checkstyle
 |            |
 |            |-> checks
 |                  |
 |                  |-> IllegalExceptionThrowsCheck.java
 |
 |
 |-> lib
 |   |
 |   |->checkstyle-8.10.1-all.jar
 |
 |
 |-> Samples
       |
       | -> Test.java

Com.PuppyCrawl.Tools.CheckStyle.API.CheckStyleException:无法初始化模块TreeWalker-无法实例化“Com.CheckStyle.Checks.IllegalExceptionThrowscheck”类,也不可能将其实例化为NULL。请重新检查类名是否指定为规范名称,或阅读如何配置短名称用法http://checkstyle.sourceforge.net/config.html#packages。还请重新检查所提供的Checker的类加载器是否配置正确。在com.puppycrawl.tools.checkstyle.checker.setupchild(checker.java:460)在com.puppycrawl.tools.checkstyle.api.automaticbean.configure(automaticbean.198)在com.puppycrawl.tools.checkstyle.main.runcheckstyle(main.java:550)在com.puppycrawl.tools.checkstyle.main.runcli(main.java:465)在请重新检查类名是否指定为规范名称,或阅读如何配置短名称用法http://checkstyle.sourceforge.net/config.html#packages。还请重新检查所提供的Checker的类加载器是否配置正确。在com.puppycrawl.tools.Checkstyle.packageobjectfactor.CreateModule(packageobjectfactor.java:208)在com.puppycrawl.tools.Checkstyle.treewalker.setupchild(treewalker.java:151)在com.puppycrawl.tools.Checkstyle.api.automaticbean.configure(automaticbean.java:198)在

共有1个答案

何修能
2023-03-14

类IllegalExceptionThrowsCheck扩展检查{

首先,基类不再是check。它是abstractcheckcheck不久前被删除了,而您的CLI命令说您使用的是8.10.1,所以我不知道您是如何使用不存在的基类check进行编译的。

java-jar lib/checkstyle-8.10.1-all.jar com.puppycrawl.tools.checkstyle.main-c custom_check.xml示例/test.java

我建议将项目打包到一个jar中,然后将其包含在命令行中。示例:java-classpath mycustom.jar;checkstyle-8.10.1-all.jar com.puppycrawl.tools.checkstyle.main-c config.xml check.java
http://checkstyle.sourceforge.net/cmdline.html#usage_by_classpath_update

第三,您可以将您的setter更改为:

public void setIllegalExceptionThrows(String... illegalExceptionThrowsStr) {
    this.illegalExceptionThrows = Arrays.asList(illegalExceptionThrowsStr);
}
 类似资料:
  • 我编写了一些自定义checkstyle检查并将它们存储在一个jar中,以便与maven checkstyle插件一起使用。对于eclipse checkstyle插件,我使用了相同的jar。如果我需要更新自定义检查,在maven中很容易(只需在pom中更新版本)。要更新插件,我需要手动替换Eclipse中的插件文件。有办法自动保持这2个文件同步吗?

  • 禁止DisableNastyThing1或DisableNastyThing2的工作方式与禁止模块完全相同。换句话说,myCheck XML元素名将表示这样一个事实,即该检查没有映射到实现AbstractCheck的实际Java类,而是映射到执行嵌套在其中的检查的一些通用检查。 是不是Checkstyle中已经有这样的概念,而我却没能找到它,还是怎么的?

  • 问题内容: 怀疑在VBA ADO和Sql查询中… 我有2张纸,即adodc1,adodc2(在一本工作簿中) 在adodc1中具有“名称”,“部门”列,有时其具有“ Sect”列 在adodc2中具有“名称”,“部门”,“宗派”列 我想要的是当我运行Query..Vba时需要检查adodc1是否具有Sect列。 要返回为空值.. 下面的代码取自“”,根据我的需要进行了更改 它将执行的工作是来自两张

  • 我需要一个命令来检查tomcat服务器中的permgenspace。最基本的是,如果我遇到了permgenspace错误,我希望看到那里的空间。 我使用以下命令来检查permgenspace,即使Tomcat可能会遇到java.lang.OutOfMemoryError:permGen空间错误,它总是显示相同的大小。 错误:找不到或加载主类 tomcat 请就此建议我。

  • 我试图在PySpark中运行一个自定义的HDFS阅读器类。这个类是用Java编写的,我需要从PySpark访问它,可以从shell访问,也可以使用spark-submit访问。 有人能帮忙吗?谢了。