// SonarScanner 의 sonar.java.libraries / sonar.java.test.libraries 로 넘길 // 컴파일 클래스패스를 파일로 덤프한다. // // build.gradle 을 건드리지 않기 위해 init script(-I) 로만 주입한다. // gradle -I ci/sonar-classpath.gradle exportSonarClasspath --no-daemon // // 출력(콤마 구분, 절대경로): // build/sonar/java-libraries.txt main 컴파일 클래스패스 // build/sonar/java-test-libraries.txt main + test 컴파일 클래스패스 // // 이 파일이 없으면 Sonar Java 분석기가 타입을 해석하지 못해 // 보안 룰(SQL Injection, XSS 등) 상당수가 침묵한다. 선택 사항이 아니다. rootProject { project -> project.plugins.withId('java') { project.tasks.register('exportSonarClasspath') { group = 'verification' description = 'SonarScanner 용 컴파일 클래스패스를 build/sonar 에 덤프한다' doLast { def outDir = new File(project.layout.buildDirectory.get().asFile, 'sonar') outDir.mkdirs() def toLine = { files -> files.findAll { it.exists() } .collect { it.absolutePath } .unique() .join(',') } def mainCp = project.sourceSets.main.compileClasspath.files def testCp = project.sourceSets.test.compileClasspath.files new File(outDir, 'java-libraries.txt').text = toLine(mainCp) new File(outDir, 'java-test-libraries.txt').text = toLine(mainCp + testCp) logger.lifecycle("sonar classpath dumped: ${outDir}") } } } }