Bạn cấu hình các nhiệm vụ Sonar để tải lên báo cáo thử nghiệm đơn vị và Cobertura được tạo ra bởi các bộ phận khác của xây dựng logic của bạn.
Điều này trái ngược với Maven có vòng đời xây dựng chuẩn mà Sonar có thể tận dụng.
Kiểm tra đơn vị và mã bảo hiểm
Logic sau chạy các kiểm tra đơn vị với các lớp được thiết bị cobertura.Một báo cáo bảo hiểm XML được tạo ra bởi Cobertura ở cuối:
<target name="instrument-classes" depends="compile-tests">
<taskdef resource="tasks.properties" classpathref="test.path"/>
<cobertura-instrument todir="${instrumented.classes.dir}" datafile="${build.dir}/cobertura.ser">
<fileset dir="${classes.dir}"/>
</cobertura-instrument>
</target>
<target name="junit" depends="instrument-classes">
<junit printsummary="yes" haltonfailure="yes">
<classpath>
<path refid="test.path"/>
<pathelement path="${instrumented.classes.dir}"/>
<pathelement path="${test.classes.dir}"/>
</classpath>
<formatter type="xml"/>
<batchtest fork="yes" todir="${test.reports.dir}">
<fileset dir="${test.src.dir}">
<include name="**/*Test*.java"/>
<exclude name="**/AllTests.java"/>
</fileset>
</batchtest>
</junit>
</target>
<target name="test" depends="junit">
<cobertura-report format="xml" datafile="${build.dir}/cobertura.ser" destdir="${cobertura.reports.dir}"/>
</target>
Gọi Sonar
Tôi thường sử dụng một mục tiêu Sonar rất đơn giản:
<target name="sonar" depends="test">
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml" classpathref="sonar.path"/>
<sonar:sonar key="${sonar.project.key}" version="${sonar.project.version}" xmlns:sonar="antlib:org.sonar.ant"/>
</target>
Và sử dụng một thuộc tính tập tin để kiểm soát tất cả các khía cạnh hành vi của Sonar:
sonar.project.key=org.demo:demo
sonar.project.version=1.0-SNAPSHOT
sonar.projectName=Demo project
sonar.host.url=http://myserver:9000
sonar.jdbc.url=jdbc:mysql://myserver:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar.jdbc.driverClassName=com.mysql.jdbc.Driver
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.sources=${src.dir}
sonar.tests=${test.src.dir}
sonar.binaries=${classes.dir}
sonar.dynamicAnalysis=reuseReports
sonar.surefire.reportsPath=${test.reports.dir}
sonar.java.coveragePlugin=cobertura
sonar.cobertura.reportsPath=${cobertura.reports.dir}/coverage.xml
Chứng minh cách Sonar có thể được định cấu hình nhận các báo cáo thử nghiệm đơn vị được tạo bởi junit và báo cáo phạm vi mã được tạo bởi cobertura.
Bản dựng không phải chạy trên cùng một máy chủ với Sonar. Trong trường hợp đó, người ta phải cung cấp thông tin đăng nhập của Sonar URL và JDBC từ xa.
Nguồn
2011-10-13 22:03:23
Cập nhật về chủ đề này: ví dụ có thể được tìm thấy trên kho lưu trữ hình ảnh sonar của chúng tôi => https://github.com/SonarSource/sonar-examples/tree/master/projects/code-coverage –