我想在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)在
类IllegalExceptionThrowsCheck扩展检查{
首先,基类不再是check
。它是abstractcheck
。check
不久前被删除了,而您的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访问。 有人能帮忙吗?谢了。