2014-11-27 2 views
1

У меня есть проект sbt с несколькими модулями, которые необходимо упаковывать в архивы jar. Как я видеть в журналах SBT пакетов каждый проект в банку последовательно:Как настроить sbt для параллельного пакета в банки?

[info] Packaging C:path\target\scala-2.11\projectFirst ... 
[info] Packaging C:path\target\scala-2.11\projectSecond ... 
[info] Packaging C:path\target\scala-2.11\projectThrird ... 

проекты не зависят друг от друга и могут быть упакованы параллельно. Есть ли возможность настроить sbt для параллельной реализации проектов?

ответ

0

В 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/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); 
    } 
}) 

В sub2, sub3 и sub4 build.sbt практически идентична, как и в sub1. Я изменил только количество итераций и напечатанных номеров. я получил следующий вывод:

> 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. Но для каждого из них называется зависимая задача. Как мы видим в выводе, эти зависимые задачи выполняются pallalelly, но только по два за раз. Это coresponds к следующей фразе из дока:

(хотя никогда не подвергается в качестве параметра, максимальное количество задач, запущенных в данный момент времени было внутренне настраивается так же.)

После трех линий от выхода :

[info] Resolving org.scala-lang#scala-compiler;2.10.4 ... 
SubProject 4: 10 
[info] Resolving org.scala-lang#scala-reflect;2.10.4 ... 

Предоставить доказательство того, что задача упаковки из одного подпроекта выполняется параллельно с зависимой задачей из другого подпроекта.

+0

Это ** компиляция ** цель, ** нет ** сборка какой пакет проекты. :) Кроме того, я вижу, что в проводнике процесса имеется 4 области загрузки с высокой загрузкой процессора, поэтому архивы упаковываются последовательно – Cherry

Смежные вопросы