在使用ant+clover的時候,經常碰到下面的異常:
BUILD FAILED
com.atlassian.clover.registry.NoSuchRegistryException: Clover registry file "/tmp/clover-db/ant-coverage.db" does not exist, cannot be read or is a directory.
Please ensure Clover has instrumented your source files.
You may need to remove existing .class files for this to occur.
at com.cenqua.clover.CloverDatabase.<init>(CloverDatabase.java:82)
at com.cenqua.clover.CloverDatabase.<init>(CloverDatabase.java:60)
at com.cenqua.clover.reporters.CloverReportConfig.getCoverageDatabase(CloverReportConfig.java:329)
at com.cenqua.clover.reporters.Current.getCoverageDatabase(Current.java:126)
at com.cenqua.clover.reporters.xml.XMLReporter.<init>(XMLReporter.java:52)
at com.cenqua.clover.reporters.CloverReporter.buildReporter(CloverReporter.java:70)
at com.cenqua.clover.tasks.CloverReportTask.generateReports(CloverReportTask.java:428)
at com.cenqua.clover.tasks.CloverReportTask.cloverExecute(CloverReportTask.java:385)
at com.cenqua.clover.tasks.CloverHtmlReportTask.cloverExecute(CloverHtmlReportTask.java:108)
at com.cenqua.clover.tasks.AbstractCloverTask.execute(AbstractCloverTask.java:55)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at org.apache.tools.ant.Main.runBuild(Main.java:758)
at org.apache.tools.ant.Main.startAnt(Main.java:217)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
Total time: 56 seconds
這個錯誤是因為,沒有生成clover記錄數據庫造成的。
經過多次的實驗,發現用下面的方法可以解決:
<target name="clover.with" depends="clover.tasks">
<delete file="${clover.db.file}"/>
<clover-instr initstring="${clover.db.file}" srcdir="${src.dir}"
destdir="${clover.tmp.dir}"></clover-instr>
</target>
<target name="clover.compile">
<javac srcdir="${clover.tmp.dir}"
destdir="${classes.dir}"
encoding="UTF-8"
includeantruntime="true"
failonerror="true"
verbose="false"
compiler="modern"
fork="true"
target="1.6"
nowarn="true">
<classpath refid="build.lib"/>
</javac>
</target>
這個地方,把clover.compile獨立出來編譯。有一個關鍵的地方是在粗體的部分,要指定一個臨時目錄,用來存放添加了stub的java類,也就說,獨立一個地方存放插了樁的java類,然后對其編譯,這樣就能在后續的junit.test.only任務執行的時候生成clover記錄數據庫了。
希望對使用clover的朋友能有所幫助。
|----------------------------------------------------------------------------------------|
版權聲明 版權所有 @zhyiwww
引用請注明來源 http://www.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2010-12-14 15:19
zhyiwww 閱讀(567)
評論(0) 編輯 收藏 所屬分類:
軟件測試 、
linux