ANT 检查样式任务:找不到/访问 AST 节点



在尝试设置Hudson以使用ANT构建我们的项目时,我偶然发现了一个类似于此的问题。然而,建议的解决方案对我来说并不奏效。

我通过设置自己类路径的ANT任务调用checkstyle。

<target name="checkstyle" depends="init, staticAnalysisInit">
    <mkdir dir="${checkstyle.dir}"/>
    <path id="checkstyle.classpath">
        <fileset dir="${env.CHECKSTYLE_HOME}">
            <include name="*.jar"/>
            <exclude name="*all.jar"/>
            <!-- already bundled with ANT distributions and causes problems -->
            <exclude name="antlr*.jar"/> 
        </fileset>
    </path>
    <property name="chkstyl.cp" refid="checkstyle.classpath"/>
    <echo>Checkstyle classpath: ${chkstyl.cp}</echo>
    <taskdef name="checkstyle" 
             classpathref="checkstyle.classpath" 
             classname="com.puppycrawl.tools.checkstyle.CheckStyleTask"/>
    <checkstyle config="${env.CHECKSTYLE_HOME}/sun_checks.xml"
                failOnViolation="false">
        <formatter type="xml" toFile="${checkstyle.dir}/checkstyle.xml"/>
        <fileset dir="${src.dir}">
            <include name="**/*.java"/>
        </fileset>
    </checkstyle>
</target>

它给我以下输出:

init:
staticAnalysisInit:
checkstyle:
     [echo] Checkstyle classpath: C:Program Files (x86)Checkstylecheckstyle-5.6checkstyle-5.6.jar;C:Program Files (x86)Checkstylecheckstyle-5.6commons-beanutils-core-1.8.3.jar;C:Program Files (x86)Checkstylecheckstyle-5.6commons-cli-1.2.jar;C:Program Files (x86)Checkstylecheckstyle-5.6commons-logging-1.1.1.jar;C:Program Files (x86)Checkstylecheckstyle-5.6google-collections-1.0.jar
[checkstyle] Running Checkstyle 5.6 on 1025 files
[checkstyle] Can't find/access AST Node typecom.puppycrawl.tools.checkstyle.api.DetailAST
[checkstyle] Can't find/access AST Node typecom.puppycrawl.tools.checkstyle.api.DetailAST
[checkstyle] Can't find/access AST Node typecom.puppycrawl.tools.checkstyle.api.DetailAST
...

相同的输出在我的IDE(自己的ANT实例,手动将相同的antlr.jar添加到它的类路径中)、命令行和hudson(后两者使用1.8.3 ANT的常见分发版,其中antlr存在于$ANT_HOME/lib中)中生成。

到目前为止,我唯一能让它工作的方法是在IDE中(删除了手动添加的antlr.jar类路径条目,并使用checkstyle-56-all.jar作为任务类路径)。

ant和checkstyle发行版中都有相同版本的antlr。事实上,如果将它们中的任何一个包含在ant库类路径中(并且不使用checkstyle-56-all.jar),它在我的IDE中就不起作用

我做错了什么?

我放弃了解决这个问题的尝试。将checkstyle.classpath更改为

<path id="checkstyle.classpath">
    <fileset dir="${env.CHECKSTYLE_HOME}">
        <include name="*all.jar"/>
    </fileset>
</path>

并删除了$ANT_HOME/lib中的antlr.jar,可能会破坏内容。

但仍在寻找潜在的答案。

有关详细信息,请参阅此GitHub线程:https://github.com/kframework/k/issues/659

我尝试了checkstyle-10.5.0-all.jar,它能在中工作

对于jdk 11,使用checkstyle版本>10对于jdk 8,使用checkstyle版本checkstyle-9.1-all.jar

checkstyle-*-all.jar将所有jar放在一个位置并添加到类路径中,否则我们需要逐个添加单个jar

这样做,我们不需要从类路径中删除antlr

相关内容

  • 没有找到相关文章

最新更新