2013-04-18 2 views
1

sbt에서 작업에 mapR 작업을 사용하면 경고 및 기타 정보를 얻을 수있는 Analysis 개체를 얻을 수 있습니다. 이를 통해 프로그래밍 방식으로 프로젝트 별 경고 통계를 추적 할 수 있습니다.sbt 하위 프로젝트에 대한 집계 분석

그러나 sbt의 집계 기능을 사용하여 루트 프로젝트 아래에 여러 하위 프로젝트를 집계했습니다. 이 정보 (또는 임의의 정보)를 이와 같이 집계 트리 위로 집계하는 관용적 인 방법이 있습니까? 예를 들어 전체 빌드에서 총 경고 수를 알고 싶다면 어떻게해야합니까? 각 프로젝트의 compile 단계 이후에 내 sbt 프로젝트 내에서 스칼라 수준의 전역 상태를 유지하고 AtomicInteger에 추가 할 수는 있지만보기 흉한 것처럼 느껴지고 더 좋은 방법이 있어야합니다.

컨텍스트에서 TeamCity에 빌드의 총 경고 수를 알려주므로이 정보를 집계 할 수 있어야합니다.

답변

2

원하는 모든 Analysis 값이 클래스 경로에있는 경우에만 Analysis를 가져 오는 것과 관련된 간단한 방법이 있습니다. sbt에서 클래스 경로는 Seq[Attributed[File]]입니다. Attributed 부분은 각 항목에 메타 데이터를 첨부합니다. 메타 데이터의 한 부분은 해당 항목에 대해 Analysis입니다 (원본에서 컴파일 된 경우에만 분명 함).

그래서,이 클래스 패스에 대한 Seq[Analysis]을 얻을 것입니다 :

... (fullClasspath in Compile) map { (cp: Seq[Attributed[File]]) => 
    cp.map(entry => Defaults.extractAnalysis(entry)._2) 
} 

주를 부착 한이없는 경우 Defaults.extractAnalysisimplementationAnalysis를 얻을 수있다. 0.13에서


가, 마침내 일반적으로이 작업을 수행하는 API가 :

someTask := { 
    val allA: Seq[inc.Analysis] = compile.result.all(
     ScopeFilter(inAggregates(ThisProject), inConfigurations(Compile)) 
    ).value 
    ... 
} 

합니다 (result 부분을 수행합니다이 경우

http://www.scala-sbt.org/snapshot/docs/Detailed-Topics/Tasks.html#multiple-scopes

, 그것과 같을 것이다 직접 구문에서 mapR과 동일 : http://www.scala-sbt.org/snapshot/docs/Detailed-Topics/Tasks.html#result )

+0

보기에 편리합니다. 이제 정말 귀찮아지기를 원한다면, AtomicInteger를 사용하는 현재의 솔루션은 모든 서브 프로젝트 빌드로 카운터를 증가시킴으로써 TeamCity에 누적 합계를 제공 할 수 있습니다. 거기에 멋지게 할 수있는 방법이 있습니까? –

+0

나는 그렇게 생각하지 않는다. 그것이 존재한다면 아마도 https://github.com/sbt/sbt/issues/592의 형태 일 것입니다. –

관련 문제