Использование компилятора Eclipse в Jenkins для получения предупреждений/ошибок компилятора

Я хочу, чтобы предупреждения компилятора eclipse показывались в моем Jenkins Job. Я знаю, что можно использовать компилятор Eclipse с помощью адаптера ant javac. Таким образом, при использовании ant отображаются предупреждения компилятора Eclipse. Проблема в том, что когда я использую ant script в Jenkins, он игнорирует настройки javac и просто использует обычный компилятор.

Кто-нибудь пытался использовать компилятор eclipse в jenkins и получать предупреждения компилятора? может даже отправить предупреждения компилятора Sonar?

Ответ 1

После возникновения проблем с компилятором Eclipse ant javac adapter, я используйте пакетный компилятор вместо этого в отдельной цели для генерации предупреждений Eclipse. Затем я использую Warnings Plugin для анализа генерируемых предупреждений компилятора в Jenkins.

Пакетный компилятор удобно упаковывается в отдельную банку, загружаемую в разделе "JDT Core Batch Compiler" на проекте Eclipse странице загрузки и также доступны в публичных хранилищах maven как Eclipse ECJ.

Если вы поставили ecj jar на ecj.dir, следующая сборка script может быть использована для генерации предупреждений Eclipse,

build.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

Ответ 2

Если вы хотите использовать другой интерфейс компилятора, чем те, которые поставляются с ant, вы можете написать класс, который реализует интерфейс CompilerAdapter (пакет org.apache.tools.ant.taskdefs.compilers).

Поставьте полное имя класса в свойство build.compiler или compiler.

Это должно работать