2012-03-06 2 views
5

나는 .NET 코드와 안드로이드 자바 프로젝트로 구성된 프로젝트 작업을하고있다. TeamCity 환경에서 두 가지 유형의 프로젝트를 모두 수행하려고합니다.TeamCity로 안드로이드 프로젝트 빌드하기 - 테스트 및 코드 커버리지 문제

.NET 프로젝트는 일부 NUnit 프로젝트를 통해 테스트되고 있으며 DotCover를 사용하여 적용 범위 보고서를 작성하고 모두 부풀려 보인다. 이제 안드로이드/자바 프로젝트가 앤틀 러너를 사용하여 빌드되고 있으며, 프로덕션 프로젝트와 테스트 프로젝트를위한 빌드 스크립트를 모두 가지고 있습니다. 문제는 자바 커버리지 보고서를 만드는 것입니다. "커버리지 데이터에 포함 소스 파일"

빌드 단계는 옵션 "엠마 범위 주자"활성화 (이 설정되어
clean emma debug install test 

:

우리는 다음과 같은 개미 대상과 빌드 단계를 만들었습니다 확인).

빌드 단계를 실행할 때 로그 조각에서 다음과 같은 오류가 발생합니다 (전체 로그 파일이 첨부되어 있음). 또 다른 중요한 문제는 android/java 단위 테스트가 빌드의 전체 통계에는 나타나지 않는다는 것입니다.

[16:37:52]: [aapt] Generating resource IDs... 
[16:37:55]: [subant] -pre-compile 
[16:37:55]: [subant] -compile (1s) 
[16:37:55]: [-compile] do-only-if-manifest-hasCode (1s) 
[16:37:55]: [do-only-if-manifest-hasCode] sequential (1s) 
[16:37:55]: [sequential] if (1s) 
[16:37:55]: [if] Adding debug=true parameter to javac task 
[16:37:55]: [if] javac 
[16:37:55]: [if] Compiling 1 source file to C:\BuildAgent\work\c588ac2d935670cb\MyAndroidProject\bin\classes 
[16:37:55]: [if] EMMA: Instrumenting classes 
[16:37:55]: [EMMA: Instrumenting classes] EMMA commandline: [-ix, -*Test*, -cp, C:\BuildAgent\work\c588ac2d935670cb\MyAndroidProject\bin\classes, -m, overwrite] 
[16:37:55]: [EMMA: Instrumenting classes] EMMA: processing instrumentation path ... 
[16:37:56]: [EMMA: Instrumenting classes] EMMA: instrumentation path processed in 265 ms 
[16:37:56]: [EMMA: Instrumenting classes] EMMA: [167 class(es) instrumented, 0 resource(s) copied] 
[16:37:56]: [EMMA: Instrumenting classes] EMMA: metadata merged into [C:\BuildAgent\work\c588ac2d935670cb\coverage.em] {in 15 ms} 
[16:37:56]: [if] if 
[16:37:56]: [if] echo 
[16:37:56]: [echo] Instrumenting classes from C:\BuildAgent\work\c588ac2d935670cb\MyAndroidProject\bin/classes... 
[16:37:56]: [if] emma 
[16:37:56]: [emma] com.vladium.emma.EMMARuntimeException: [OUT_IO_FAILURE] exception occurred while writing output file [C:\BuildAgent\work\c588ac2d935670cb\coverage.em]: 
[16:37:56]: [do-only-if-manifest-hasCode] The following error occurred while executing this line: C:\Android\android-sdk\tools\ant\build.xml:655: com.vladium.emma.EMMARuntimeException: [OUT_IO_FAILURE] exception occurred while writing output file [C:\BuildAgent\work\c588ac2d935670cb\coverage.em]: 
[16:37:56]: [subant] The following error occurred while executing this line: C:\Android\android-sdk\tools\ant\build.xml:602: The following error occurred while executing this line: C:\Android\android-sdk\tools\ant\build.xml:655: com.vladium.emma.EMMARuntimeException: [OUT_IO_FAILURE] exception occurred while writing output file [C:\BuildAgent\work\c588ac2d935670cb\coverage.em]: 
[16:37:56]: [Step 1/18] EMMA: Create Report (4s) 
[16:38:00]: [EMMA: Create Report] Unable to find C:\BuildAgent\work\c588ac2d935670cb\coverage.ec, cannot create EMMA report 
[16:38:00]: [Step 1/18] Process exited with code 1 
[16:38:00]: [Step 1/18] Ant output: 
[16:38:00]: [Step 1/18] at java.lang.reflect.Method.invoke(Method.java:601) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Task.perform(Task.java:348) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) 
[16:38:00]: [Step 1/18] at com.android.ant.IfElseTask.execute(IfElseTask.java:120) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
[16:38:00]: [Step 1/18] at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) 
[16:38:00]: [Step 1/18] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[16:38:00]: [Step 1/18] at java.lang.reflect.Method.invoke(Method.java:601) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Task.perform(Task.java:348) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Target.execute(Target.java:390) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Target.performTasks(Target.java:411) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Project.executeTarget(Project.java:1368) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Project.executeTargets(Project.java:1251) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Main.runBuild(Main.java:809) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.Main.startAnt(Main.java:217) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
[16:38:00]: [Step 1/18] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 
[16:38:00]: [Step 1/18] Caused by: java.io.IOException: cannot merge new data into [C:\BuildAgent\work\c588ac2d935670cb\coverage.em]: created by another EMMA version [0.0.0] 
[16:38:00]: [Step 1/18] at com.vladium.emma.data.DataFactory.persist(DataFactory.java:593) 
[16:38:00]: [Step 1/18] at com.vladium.emma.data.DataFactory.persist(DataFactory.java:71) 
[16:38:00]: [Step 1/18] at com.vladium.emma.instr.InstrProcessorST._run(InstrProcessorST.java:753) 
[16:38:00]: [Step 1/18] ... 71 more 
[16:38:00]: [Step 1/18] Total time: 6 seconds 
[16:38:00]: [Step 1/18] Publishing artifacts 
[16:38:00]: [Publishing artifacts] Paths to publish: [C:\BuildAgent\work\c588ac2d935670cb\coverage.ec, C:\BuildAgent\work\c588ac2d935670cb\coverage.em, C:\BuildAgent\work\c588ac2d935670cb\coverage.txt, C:\BuildAgent\work\c588ac2d935670cb\coverage\coverage.zip] 
[16:38:00]: [Publishing artifacts] Artifacts path coverage.ec not found 
[16:38:00]: [Publishing artifacts] Artifacts path coverage.txt not found 
[16:38:00]: [Publishing artifacts] Artifacts path coverage/coverage.zip not found 
[16:38:00]: [Publishing artifacts] Sending files 
[16:38:00]: [Step 1/18] Failed to extract Emma coverage statistics from the coverage.txt, due to error: java.io.FileNotFoundException: C:\BuildAgent\work\c588ac2d935670cb\coverage.txt (The system cannot find the file specified) 
[16:38:00]: [Step 1/18] Step Test Smart Client - Unit tests (Ant) failed 

사람이 문제가 무엇인지에 대한 아이디어가 있습니까 :

여기에 로그 SNIPPIT입니까?

그런데 명령 행에서 직접 대상을 실행할 때 보고서는 문제없이 빌드됩니다.

감사 안드로이드 SDK에서 사용하는 EMMA 버전

답변

6

당은 소나 EMMA 플러그인에서 사용하는 것보다 이전 버전입니다.

코드 범위가 인코딩 된 방식으로 인코딩 된 것처럼 보이므로 소나가 형식을 인식 할 수 없습니다.

다행히도 누군가가 트랜스 코더를 만들었습니다. 이 문제는 여기에서 더 자세히 설명됩니다. http://jira.codehaus.org/browse/SONARPLUGINS-1356

앞서 언급 한 트랜스 코더의 자바 코드도 여기에서 다운로드 할 수 있습니다.

. 음파 탐지기를 실행하기 전에 .em과 .ec 파일을 모두 코드 변환하면됩니다. 정상적으로 읽고 테스트해야합니다.

+0

오늘 정말 도움이되었습니다. – Argyle

+2

다른 사람이 내 운명을 공유하기를 원하지 않는다고 생각하기에는 어려웠습니다 :) – Rosomack

+0

대단히 유용하고 완벽하게 작동했습니다 : EmmaTranscoder.class를 적용 파일과 동일한 디렉토리에 복사하고'java -cp. EmmaTranscoder 적용 범위. [ec | em]' – friederbluemle

관련 문제