11

我想在我的 Jenkins Job 中显示 eclipse 编译器警告。我知道使用 ant javac 适配器可以使用 Eclipse 编译器。这样在使用 ant 时会显示 Eclipse 编译器警告。问题是当我在 Jenkins 中使用 ant 脚本时,他忽略了 javac 设置,只使用普通编译器。

有没有人尝试在 jenkins 中使用 eclipse 编译器并收到编译器警告?甚至可能将编译器警告发送给声纳?

4

2 回答 2

6

在 Eclipse 编译器ant javac 适配器出现问题后,我在单独的目标中使用批处理编译器来生成 Eclipse 警告。然后我使用警告插件来解析 Jenkins 中生成的编译器警告。

批处理编译器方便地打包在一个单独的 jar 中,可在 Eclipse 项目下载页面上的“JDT Core Batch Compiler”部分下载,也可以在公共 maven 存储库中作为Eclipse ECJ获得。

如果您已将 ecj jar 暂存到ecj.dir,则可以利用以下构建脚本来生成 Eclipse 警告,

构建.xml

<?xml version="1.0" encoding="UTF-8" ?>
<project name="some-project" default="eclipse-warnings" basedir=".">
    <target name="eclipse-warnings" depends="init">        
        <property name="ecj.log.dir" value="${build.dir}/ecj" />
        <property name="ecj.warnings.file" value="${ecj.log.dir}\eclipse_compiler_out.txt"/>
        <delete dir="${ecj.log.dir}" />
        <mkdir  dir="${ecj.log.dir}" />

        <property name="ecj.properties" value="${basedir}\etc\ecj\eclipse_compiler.properties" />                

        <!-- Redirect output to tempfile if you don't want results also on console -->
        <tempfile property="ecj.output.tempfile" suffix=".log" deleteonexit="true" />

        <echo message="Generating Eclipse warnings to ${ecj.warnings.file}" />        
        <java 
            jar="${ecj.dir}/ecj.jar"
            fork="true"
            maxmemory="512m"
            output="${ecj.output.tempfile}">

            <arg value="-cp" />
            <arg value="${toString:compile.classpath}" />
            <arg value="-d" />
            <arg value="none" />
            <arg value="-enableJavadoc" />
            <arg value="-log" />
            <arg value="${ecj.warnings.file}" />            
            <arg value="-${javac.source.version}" />
            <arg value="-properties" />
            <arg value="${ecj.properties}" />
            <arg value="${src.dir}" />
            <arg value="${test.dir}" />            
        </java>

        <!-- Echo number of warnings found -->
        <loadfile srcfile="${ecj.warnings.file}" property="ecj.warnings.file.summary">
            <filterchain>
                <tailfilter lines="1" />
            </filterchain>
        </loadfile>
       <echo message="${ecj.warnings.file.summary}" />
    </target>    
</project>

eclipse_compiler.properties包含编译器警告/错误设置,可以从项目.settings/org.eclipse.jdt.core.prefs文件中复制或在CompilerOptions类中定义。

eclipse_compiler.properties

#Eclipse compiler warnings and errors
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
于 2013-06-20T20:05:54.847 回答
1

如果您希望使用与 ant 提供的编译器接口不同的编译器接口,您可以编写一个实现该CompilerAdapter接口的类(包 org.apache.tools.ant.taskdefs.compilers)。

build.compiler在属性或属性中提供完整的类名compiler

这应该工作

于 2013-01-07T16:33:54.407 回答