사용자 도구

사이트 도구


gradle:sonarqube

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
gradle:sonarqube [2015/11/11 21:38]
kwon37xi [jacoco]
gradle:sonarqube [2018/04/20 18:30] (현재)
kwon37xi [Multiple Module]
줄 1: 줄 1:
 ====== Gradle SonarQube ====== ====== Gradle SonarQube ======
-  * [[http://www.gradle.org/docs/current/userguide/sonar_runner_plugin.html|Gradle Sonar Runner Plugin]] : 최신 버전은 Sonar Runner Plugin을 사용해야 한다.+  * https://plugins.gradle.org/plugin/org.sonarqube  
 +  * https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Gradle
  
 ===== 주의 ===== ===== 주의 =====
줄 10: 줄 11:
   * 최신 SonarQube는 더이상 JDBC를 통한 저장을 지원하지 않는 듯 하다. 따라서 ''sonar.jdbc.*'' 프라퍼티는 무시된다.   * 최신 SonarQube는 더이상 JDBC를 통한 저장을 지원하지 않는 듯 하다. 따라서 ''sonar.jdbc.*'' 프라퍼티는 무시된다.
 <code> <code>
-apply plugin: 'sonar-runner'+buildscript { 
 +    dependencies { 
 +        classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.2" 
 +    } 
 +
 +apply plugin: "org.sonarqube"
  
-sonarRunner +sonarqube 
-    sonarProperties +    properties 
-        property "sonar.host.url", "http://my.server.com+        property "sonar.host.url", "http://localhost:8080" 
-        property "sonar.jdbc.url", "jdbc:mysql://my.server.com/sonar+        property "sonar.sources", "src" 
-        property "sonar.jdbc.driverClassName", "com.mysql.jdbc.Driver+        property "sonar.language", "java" // 분석을 Java로 제한 
-        property "sonar.jdbc.username", "Fred Flintstone+        property "sonar.sourceEncoding", "UTF-8" 
-        property "sonar.jdbc.password", "very clever"+        property "sonar.exclusions", "**/*Test*.*, **/Q*.JAVA" 
 +        property "sonar.test.inclusions", "**/*Test.groovy, **/*Test.java
 +        property "sonar.coverage.exclusions", "**/*Test*.*, **/Q*.java
 +        property "sonar.java.junit.reportPaths", "${buildDir}/test-results
 +        property "sonar.jacoco.reportPaths", "${buildDir}/jacoco/jacoco.exec"
     }     }
 } }
 +
 </code> </code>
 +  * ''sonar.projectKey'' 는 프로젝트명:모듈명으로 자동지정된다. 명시적 지정도 가능하다.
   * ''sonar.working.directory'' 함부로 지정하지 말고 기본값 ''$project.buildDir/sonar''으로 둘 것. 여기서 지정된 워킹 디렉토리는 자동으로 sonarRunner 실행시 전체 삭제를 한다.   * ''sonar.working.directory'' 함부로 지정하지 말고 기본값 ''$project.buildDir/sonar''으로 둘 것. 여기서 지정된 워킹 디렉토리는 자동으로 sonarRunner 실행시 전체 삭제를 한다.
 +  * 원칙적으로 ''sonar.host.url''은 시스템 프라퍼티 ''-Dsonar.host.url=http://sonar.mycompany.com''로 지정가능.<code>
 +systemProp.sonar.host.url=http://localhost:9000
 +</code>
 +
 ===== 분석에서 특정 클래스 제외 ===== ===== 분석에서 특정 클래스 제외 =====
   * ''sonar.exclusions'' 프라퍼티를 ''<nowiki>*,**,?</nowiki>'' wild card를 이용해 지정한다. 여러개가 필요하면 쉼표로 구분한다.<code java>   * ''sonar.exclusions'' 프라퍼티를 ''<nowiki>*,**,?</nowiki>'' wild card를 이용해 지정한다. 여러개가 필요하면 쉼표로 구분한다.<code java>
줄 50: 줄 66:
   * ''Incompatible version 1007'' 오류 : jacoco ''0.7.5''부터 바이너리 파일 포맷이 변경되었음. sonarqube도 그에 맞는 버전을 사용하지 않으면 오류가 발생한다.   * ''Incompatible version 1007'' 오류 : jacoco ''0.7.5''부터 바이너리 파일 포맷이 변경되었음. sonarqube도 그에 맞는 버전을 사용하지 않으면 오류가 발생한다.
   * jacoco 분석파일 경로는 ''sonar.jacoco.reportPath'' 프라퍼티로 지정한다. 기본값은 자동으로 [[gradle:jacoco|Gradle JaCoCo Plugin]] 플러그인에 지정한 파일이다.   * jacoco 분석파일 경로는 ''sonar.jacoco.reportPath'' 프라퍼티로 지정한다. 기본값은 자동으로 [[gradle:jacoco|Gradle JaCoCo Plugin]] 플러그인에 지정한 파일이다.
-    * 단, 이 분석파일이 ''sonar.working.directory'' 디렉토리 아래이면 안된다. 따라서 기본 ''sonar.working.directory''인 ''build/sonar''아래에 두면 안된다.+    * 단, 이 분석파일이 ''sonar.working.directory'' 디렉토리 아래이면 안된다. 따라서 이 프라퍼티를 기본값으로 사용시에는 ''$project.buildDir/sonar''아래에 두면 안된다. 
 ===== 명령행 옵션 ===== ===== 명령행 옵션 =====
   * ''-Dsonar.verbose=true'' 상세 로그   * ''-Dsonar.verbose=true'' 상세 로그
줄 57: 줄 74:
 gradle sonarRunner -Dsonar.host.url=http://sonar.mycompany.com -Dsonar.jdbc.password=myPassword -Dsonar.verbose=true gradle sonarRunner -Dsonar.host.url=http://sonar.mycompany.com -Dsonar.jdbc.password=myPassword -Dsonar.verbose=true
 </code> </code>
 +
 +===== Multiple Module =====
 +  * 멀티 모듈 프로젝트의 경우 root project에만 ''apply plugin: "org.sonarqube"''를 하고 subproject 에는 지정하지 않는다.
 +  * root 프로젝트 설정에 sonarqube 공통 설정을 하고, 각각의 소스 디렉토리등에 대한 설정은 ''subprojects'' 블록에서 한다.
 +  * root의 공통 설정<code groovy>
 +sonarqube {
 +    properties {
 +        // sonar.host.url 등 프로젝트별로 다르지 않은 모든 설정들...
 +        property "sonar.sourceEncoding", "UTF-8"
 +    }
 +}
 +</code>
 +  * 각 subprojects별 설정<code groovy>
 +sonarqube {
 +    properties {
 +        // 프로젝트별로 달라지는 설정들
 +        property "sonar.sources", "src/main/java"
 +        property "sonar.junit.reportPaths", "${buildDir}/test-results"
 +        property "sonar.jacoco.reportPaths", "${buildDir}/jacoco/jacoco.exec"
 +    }
 +}
 +</code>
 +  * 일부 subproject skip<code groovy>
 +project(":project2") {
 +    sonarqube {
 +        skipProject = true
 +    }
 +}
 +</code>
 +===== 오류 대응 =====
 +==== File not found, Resource not found 대량 발생 ====
 +  * SonarQube가 멀티 언어를 지원하는데, java 분석이 완료된 뒤에 groovy 분석을 진행하면서 **아마도** Java와 동일 jacoco 결과로 groovy 쪽 클래스를 찾기 때문으로 예상됨.
 +  * Groovy는 테스트 코드용([[java:spock|Spock]])이라서 ''sonar.language=java''로 지정하니 해결 되었음.
 +
  
  
gradle/sonarqube.1447247334.txt.gz · 마지막으로 수정됨: 2015/11/11 21:38 저자 kwon37xi