首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置并行打包成jars的sbt?

如何设置并行打包成jars的sbt?
EN

Stack Overflow用户
提问于 2014-11-27 18:21:25
回答 1查看 165关注 0票数 1

我有一个sbt项目,其中有几个模块需要打包到jar归档中。正如我在日志中看到的,sbt按顺序将每个项目打包到jar中:

代码语言:javascript
复制
[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设置为并行打包项目?

EN

回答 1

Stack Overflow用户

发布于 2014-11-28 23:03:58

在sbt documentation中,我们可以找到以下句子:

默认情况下,sbt并行执行任务。

我准备了实验来验证这一点。我创建了一个包含4个子项目的项目。这是一个代码:

主build.sbt:

代码语言:javascript
复制
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

代码语言:javascript
复制
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中相同。我只更改了迭代次数和打印数量。我收到了以下输出:

代码语言:javascript
复制
> 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子项目就会执行这个任务。但是对于每一个,依赖的任务都被称为。正如我们在输出中看到的,这些相关任务运行得很苍白,但一次只能运行两个。这与doc中的以下句子相对应:

(虽然从未公开为设置,但在给定时间运行的最大任务数也可以在内部配置。)

以下是输出中的三行:

代码语言:javascript
复制
[info] Resolving org.scala-lang#scala-compiler;2.10.4 ...
SubProject 4: 10
[info] Resolving org.scala-lang#scala-reflect;2.10.4 ...

提供来自一个子项目的打包任务与其他子项目的依赖任务并行运行的证明。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27168196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档