在尝试设置Hudson使用ANT构建我们的项目时,我偶然发现了与this one类似的问题。然而,建议的解决方案对我不起作用。
我通过设置自己的类路径的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)\Checkstyle\checkstyle-5.6\checkstyle-5.6.jar;C:\Program Files (x86)\Checkstyle\checkstyle-5.6\commons-beanutils-core-1.8.3.jar;C:\Program Files (x86)\Checkstyle\checkstyle-5.6\commons-cli-1.2.jar;C:\Program Files (x86)\Checkstyle\checkstyle-5.6\commons-logging-1.1.1.jar;C:\Program Files (x86)\Checkstyle\checkstyle-5.6\google-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-5.6-all.jar作为任务类路径)。
同样版本的antlr在ant和checkstyle发行版中都有。事实上,如果在ant库类路径中包含其中任何一个(并且不使用checkstyle-5.6-all.jar),它在我的IDE中不起作用。
我做错了什么?
答案 0 :(得分:2)
我放弃了试图解决这个问题。已将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