使用 Ant 将 JaCoCo 集成到声纳中
Posted
技术标签:
【中文标题】使用 Ant 将 JaCoCo 集成到声纳中【英文标题】:integrating JaCoCo in sonar using Ant 【发布时间】:2013-12-21 08:21:12 【问题描述】:我坚持使用 Ant 将 JaCoCo 与声纳集成。 这项任务非常新,并且是第一次集成。 我浏览了很多链接,例如
https://github.com/SonarSource/sonar-examples/blob/master/projects/code-coverage/ut/ant/ut-ant-jacoco-runTests/build.xml http://docs.sonarqube.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Project 等等。我正在尝试在另一个 VM 上显示结果,并且代码在我的 VM 中。 得到与JDK6,VM相关的各种错误,并且无法分析我的包结构 我的问题是我是否需要在上述 VM 等链接中定义任何特定的项目属性 我还想包括我的检查样式,并且 findbugs 的工作方式非常有魅力。 只需要集成 JaCoCo。 任何信息都会有很大帮助。
如果发现我的描述不符合我的要求,请询问
感谢您的帮助
【问题讨论】:
github.com/SonarSource/sonar-examples/tree/master/projects/… 谢谢马克,我想告诉你这是我在问题中提到的github链接。 【参考方案1】:以下是配置为运行 junit 单元测试并使用 jacoco 进行代码覆盖率报告的 ANT 构建。结果上传到 Sonar,最后使用 ivy 下载 3rd 方 jar 和管理类路径。
示例
├── build.properties
├── build.xml
├── ivy.xml
└── src
├── main
│ └── java
│ └── org
│ └── demo
│ └── App.java
└── test
└── java
└── org
└── demo
└── AppTest.java
build.properties
# Build properties
build.dir=build
src.dir=src/main/java
test.src.dir=src/test/java
classes.dir=$build.dir/classes
test.classes.dir=$build.dir/test-classes
reports.dir=$build.dir/reports
# Sonar properties
sonar.projectKey=org.demo:demo
sonar.projectName=Demo project
sonar.projectVersion=1.0
sonar.projectDescription=This is my demo Sonar project
sonar.host.url=http://localhost:9000
sonar.jdbc.url=jdbc:h2:tcp://localhost:9092/sonar
sonar.jdbc.driverClassName=org.h2.Driver
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.working.directory=$build.dir/sonar
sonar.language=java
sonar.sources=$src.dir
sonar.binaries=$classes.dir
sonar.tests=$test.src.dir
sonar.dynamicAnalysis=reuseReports
sonar.surefire.reportsPath=$reports.dir/junit
sonar.java.coveragePlugin=jacoco
sonar.jacoco.reportPath=$build.dir/jacoco.exec
build.xml
<project name="demo" default="test" xmlns:ivy="antlib:org.apache.ivy.ant">
<property file="build.properties"/>
<target name="bootstrap" description="Install ivy">
<mkdir dir="$user.home/.ant/lib"/>
<get dest="$user.home/.ant/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.3.0/ivy-2.3.0.jar"/>
</target>
<target name="resolve" description="Download dependencies and setup classpaths">
<ivy:resolve/>
<ivy:report todir='$reports.dir/ivy' graph='false' xml='false'/>
<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="test.path" conf="test"/>
<ivy:cachepath pathid="build.path" conf="build"/>
</target>
<target name="init" depends="resolve" description="Create build directories">
<mkdir dir="$classes.dir"/>
<mkdir dir="$test.classes.dir"/>
<mkdir dir="$reports.dir/junit"/>
</target>
<target name="compile" depends="init" description="Compile source code">
<javac srcdir="$src.dir" destdir="$classes.dir" includeantruntime="false" debug="true" classpathref="compile.path"/>
</target>
<target name="compile-tests" depends="compile" description="Compile test source code">
<javac srcdir="$test.src.dir" destdir="$test.classes.dir" includeantruntime="false" debug="true">
<classpath>
<path refid="test.path"/>
<pathelement path="$classes.dir"/>
</classpath>
</javac>
</target>
<target name="test" depends="compile-tests" description="Run unit tests and code coverage reporting">
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" classpathref="build.path"/>
<jacoco:coverage destfile="$build.dir/jacoco.exec" xmlns:jacoco="antlib:org.jacoco.ant">
<junit haltonfailure="yes" fork="true">
<classpath>
<path refid="test.path"/>
<pathelement path="$classes.dir"/>
<pathelement path="$test.classes.dir"/>
</classpath>
<formatter type="plain" usefile="false" />
<formatter type="xml"/>
<batchtest fork="yes" todir="$reports.dir/junit">
<fileset dir="$test.src.dir">
<include name="**/*Test*.java"/>
<exclude name="**/AllTests.java"/>
</fileset>
</batchtest>
</junit>
</jacoco:coverage>
</target>
<target name="sonar" depends="test" description="Upload metrics to Sonar">
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml" classpathref="build.path"/>
<ivy:cachepath pathid="sonar.libraries" conf="compile"/>
<sonar:sonar xmlns:sonar="antlib:org.sonar.ant"/>
</target>
<target name="clean" description="Cleanup build files">
<delete dir="$build.dir"/>
</target>
<target name="clean-all" depends="clean" description="Additionally purge ivy cache">
<ivy:cleancache/>
</target>
</project>
ivy.xml
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="demo"/>
<configurations defaultconfmapping="compile->default">
<conf name="compile" description="Required to compile application"/>
<conf name="test" description="Required for test only" extends="compile"/>
<conf name="build" description="Build dependencies"/>
</configurations>
<dependencies>
<!-- compile dependencies -->
<!-- test dependencies -->
<dependency org="junit" name="junit" rev="4.10" conf="test->default"/>
<!-- build dependencies -->
<dependency org="org.codehaus.sonar-plugins" name="sonar-ant-task" rev="2.1" conf="build->default"/>
<dependency org="org.jacoco" name="org.jacoco.ant" rev="0.6.3.201306030806" conf="build->default"/>
<!-- Global exclusions -->
<exclude org="org.apache.ant"/>
</dependencies>
</ivy-module>
【讨论】:
一些工作示例代码:itestfirst.wordpress.com/2014/10/15/…以上是关于使用 Ant 将 JaCoCo 集成到声纳中的主要内容,如果未能解决你的问题,请参考以下文章