SBT documentation에서 우리는 문장 다음 찾을 수 있습니다 기본적으로
는 SBT는 병렬로 작업을 실행합니다.
실험을 준비했습니다. 4 개의 하위 프로젝트로 프로젝트를 만들었습니다.
build.sbt 주 : 이것은 코드
lazy val sub1 = project
lazy val sub2 = project
lazy val sub3 = project
lazy val sub4 = project
Keys.`package` in Compile <<= (Keys.`package` in Compile).dependsOn(Def.task {
})
SUB1, SUB2에/build.sbt
Keys.`package` in Compile <<= (Keys.`package` in Compile).dependsOn(Def.task {
for(a <- 1 to 2){
Thread.sleep(1000)
println("SubProject 1: " + a);
}
})
, SUB3와 SUB4의 build.sbt는 SUB1에서와 거의 동일하다. 반복 횟수와 인쇄 된 번호 만 변경했습니다. I 출력 다음받은 :
> package
SubProject 4: 1
SubProject 1: 1
SubProject 4: 2
SubProject 1: 2
SubProject 4: 3
SubProject 3: 1
SubProject 4: 4
SubProject 3: 2
SubProject 4: 5
SubProject 3: 3
SubProject 4: 6
SubProject 3: 4
SubProject 4: 7
SubProject 2: 1
SubProject 4: 8
SubProject 2: 2
SubProject 4: 9
SubProject 2: 3
[info] Updating {file:/D:/sbt/abc/}sub1...
[info] Resolving org.scala-lang#scala-library;2.10.4 ...
[info] Resolving org.scala-lang#scala-compiler;2.10.4 ...
SubProject 4: 10
[info] Resolving org.scala-lang#scala-reflect;2.10.4 ...
[info] Resolving org.scala-lang#jline;2.10.4 ...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Updating {file:/D:/sbt/abc/}abc...
[info] Resolving org.scala-lang#scala-library;2.10.4 ...
[info] Resolving org.scala-lang#scala-compiler;2.10.4 ...
[info] Resolving org.scala-lang#scala-reflect;2.10.4 ...
[info] Resolving org.scala-lang#jline;2.10.4 ...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Updating {file:/D:/sbt/abc/}sub3...
[info] Resolving org.scala-lang#scala-library;2.10.4 ...
[info] Resolving org.scala-lang#scala-compiler;2.10.4 ...
[info] Resolving org.scala-lang#scala-reflect;2.10.4 ...
[info] Resolving org.scala-lang#jline;2.10.4 ...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Updating {file:/D:/sbt/abc/}sub2...
[info] Resolving org.scala-lang#scala-library;2.10.4 ...
[info] Resolving org.scala-lang#scala-compiler;2.10.4 ...
[info] Resolving org.scala-lang#scala-reflect;2.10.4 ...
[info] Resolving org.scala-lang#jline;2.10.4 ...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
SubProject 4: 11
[info] Done updating.
[info] Packaging D:\sbt\abc\sub1\target\scala-2.10\sub1_2.10-0.1-SNAPSHOT.jar ...
[info] Done packaging.
[info] Packaging D:\sbt\abc\target\scala-2.10\abc_2.10-0.1-SNAPSHOT.jar ...
[info] Done packaging.
[info] Packaging D:\sbt\abc\sub3\target\scala-2.10\sub3_2.10-0.1-SNAPSHOT.jar ...
[info] Done packaging.
[info] Packaging D:\sbt\abc\sub2\target\scala-2.10\sub2_2.10-0.1-SNAPSHOT.jar ...
[info] Done packaging.
SubProject 4: 12
SubProject 4: 13
SubProject 4: 14
SubProject 4: 15
SubProject 4: 16
SubProject 4: 17
SubProject 4: 18
SubProject 4: 19
SubProject 4: 20
[info] Updating {file:/D:/sbt/abc/}sub4...
[info] Resolving org.scala-lang#scala-library;2.10.4 ...
[info] Resolving org.scala-lang#scala-compiler;2.10.4 ...
[info] Resolving org.scala-lang#scala-reflect;2.10.4 ...
[info] Resolving org.scala-lang#jline;2.10.4 ...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Packaging D:\sbt\abc\sub4\target\scala-2.10\sub4_2.10-0.1-SNAPSHOT.jar ...
[info] Done packaging.
그래서 네 개의 하위 프로젝트가 있습니다. 모든 하위 프로젝트에서 '패키지'작업은 생성 된 작업 (루프에서 인쇄 및 휴면)에 따라 다릅니다. 'package'명령을 실행하면 wach 하위 프로젝트에 대해이 작업이 실행됩니다. 그러나 각각에 대해 종속 작업이 호출됩니다. 출력에서 볼 수 있듯이 이러한 종속 작업은 평소에는 한 번에 2 개만 실행됩니다.
이
(설정으로 노출 된 적이 있지만, 주어진 시간에 실행되는 작업의 최대 개수뿐만 아니라 내부적으로 설정했다.)
출력에서 세 줄 다음은이 문서에서 다음 문장에 coresponds :
[info] Resolving org.scala-lang#scala-compiler;2.10.4 ...
SubProject 4: 10
[info] Resolving org.scala-lang#scala-reflect;2.10.4 ...
한 하위 프로젝트의 패키징 작업이 다른 하위 프로젝트의 종속 작업과 병렬로 실행된다는 증거를 제공하십시오.
이것은 ** ** ** ** ** ** ** ** 어셈블리 ** 패키지가 아닌 ** 프로젝트입니다. :) 또한, 내가 볼 수있는 프로세스 탐색기 그래프에서 4 높은 CPU로드 영역, 그래서 아카이브 순차적으로 포장됩니다 – Cherry