У меня есть цель ANT, которая дважды запускает findbugs для одного и того же исходного кода для генерации отчета xml и html
<delete dir="${findbugs.dir}"/>
<mkdir dir="${findbugs.dir}"/>
<findbugs
home="${findbugs.home}"
output="xml"
outputFile="${findbugs.dir}/findbugs.xml"
jvmargs="${findbugs.jvmargs}"
timeout="${findbugs.timeout}"
effort="${findbugs.effort}">
<sourcePath path="${src.dir}"/>
<class location="${build.classes.dir}"/>
</findbugs>
<findbugs
home="${findbugs.home}"
output="html"
outputFile="${findbugs.dir}/findbugs.html"
jvmargs="${findbugs.jvmargs}"
timeout="${findbugs.timeout}"
effort="${findbugs.effort}">
<sourcePath path="${src.dir}"/>
<class location="${build.classes.dir}"/>
</findbugs>
Это глупо, поскольку отчет html может быть сгенерирован из отчета xml с использованием
<xslt in="${findbugs.dir}/findbugs.xml" out="${findbugs.dir}/findbugs.html" style="${findbugs.home}/default.xsl"/>
, но сгенерированный HTML-отчет не имеет правильных ссылок на исходный код.Любые идеи о том, как я могу заставить это работать и избежать дублирования вызова findbugs?
Обновлено после ответа
with output="xml"
<BugInstance type="REC_CATCH_EXCEPTION" priority="2" abbrev="REC" category="STYLE">
<Class classname="com.x.y.aggregate.AggregationProperties">
<SourceLine classname="com.x.y.aggregate.AggregationProperties" start="20" end="788" sourcefile="AggregationProperties.java" sourcepath="com/x/y/aggregate/AggregationProperties.java"/>
</Class>
<Method classname="com.x.y.aggregate.AggregationProperties" name="setAggregateProperties" signature="()V" isStatic="true">
<SourceLine classname="com.x.y.aggregate.AggregationProperties" start="86" end="148" startBytecode="0" endBytecode="489" sourcefile="AggregationProperties.java" sourcepath="com/x/y/aggregate/AggregationProperties.java"/>
</Method>
<SourceLine classname="com.x.y.aggregate.AggregationProperties" start="140" end="140" startBytecode="308" endBytecode="308" sourcefile="AggregationProperties.java" sourcepath="com/x/y/aggregate/AggregationProperties.java"/>
</BugInstance>
with 'xml:withMessages'
<BugInstance type="REC_CATCH_EXCEPTION" priority="2" abbrev="REC" category="STYLE" instanceHash="b7a7c8f292d2a8432680a1c971fb93b3" instanceOccurrenceNum="0" instanceOccurrenceMax="0">
<ShortMessage>Exception is caught when Exception is not thrown</ShortMessage>
<LongMessage>Exception is caught when Exception is not thrown in com.x.y.aggregate.AggregationProperties.setAggregateProperties()</LongMessage>
<Class classname="com.x.y.aggregate.AggregationProperties" primary="true">
<SourceLine classname="com.x.y.aggregate.AggregationProperties" start="20" end="788" sourcefile="AggregationProperties.java" sourcepath="com/x/y/aggregate/AggregationProperties.java" relSourcepath="com/x/y/aggregate/AggregationProperties.java">
<Message>At AggregationProperties.java:[lines 20-788]</Message>
</SourceLine>
<Message>In class com.x.y.aggregate.AggregationProperties</Message>
</Class>
<Method classname="com.x.y.aggregate.AggregationProperties" name="setAggregateProperties" signature="()V" isStatic="true" primary="true">
<SourceLine classname="com.x.y.aggregate.AggregationProperties" start="86" end="148" startBytecode="0" endBytecode="489" sourcefile="AggregationProperties.java" sourcepath="com/x/y/aggregate/AggregationProperties.java" relSourcepath="com/x/y/aggregate/AggregationProperties.java"/>
<Message>In method com.x.y.aggregate.AggregationProperties.setAggregateProperties()</Message>
</Method>
<SourceLine classname="com.x.y.aggregate.AggregationProperties" primary="true" start="140" end="140" startBytecode="308" endBytecode="308" sourcefile="AggregationProperties.java" sourcepath="com/x/y/aggregate/AggregationProperties.java" relSourcepath="com/x/y/aggregate/AggregationProperties.java">
<Message>At AggregationProperties.java:[line 140]</Message>
</SourceLine>
</BugInstance>