对于相同的模块,在“ dependsOn”之后使用“ aggregate”是否多余?

乔纳森·诺伊费尔德

在SBT中,如果两个都包含相同的子模块,是否在后面遵循聚合取决于dependOn根据文档看来,是这样,但是我之前已经看到过这种行为,我不明白这样做有什么好处。如果一个项目定义了依赖关系,这是否已经暗示对那些相同的依赖关系进行汇总?我注意到,使用此冗余聚合比不使用该冗余聚合,我的项目构建要慢得多,我想知道是否可以安全地删除它。

lazy val module = sbt.Project(...) dependsOn (foo, bar) aggregate (foo, bar)

要不就...

lazy val module = sbt.Project(...) dependsOn (foo, bar)

我正在使用SBT 0.13.6

杰西克·拉斯考夫斯基(Jacek Laskowski)

TL;博士 aggregate使任务到聚合模块和所有中执行aggregated之一,而dependsOn集的CLASSPATH依赖这样的库对可见aggregateING模块(取决于是配置compile又名default中的例子)。

展示差异的样本。

我正在使用以下内容build.sbt(没有什么真正有趣的):

lazy val a = project

lazy val b = project

lazy val c = project dependsOn b aggregate (a,b)

构建定义了三个模块ab以及c与最后c项目是聚集ab第四个模块是一个隐式模块a它汇总了所有模块b,和c

> projects
[info] In file:/Users/jacek/sandbox/aggregate-dependsOn/
[info]     a
[info]   * aggregate-dependson
[info]     b
[info]     c

当我在aggreateing模块中执行任务时,该任务将在aggregated模块中执行

> compile
[info] Updating {file:/Users/jacek/sandbox/aggregate-dependsOn/}b...
[info] Updating {file:/Users/jacek/sandbox/aggregate-dependsOn/}a...
[info] Updating {file:/Users/jacek/sandbox/aggregate-dependsOn/}aggregate-dependson...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Updating {file:/Users/jacek/sandbox/aggregate-dependsOn/}c...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[success] Total time: 0 s, completed Oct 22, 2014 9:33:20 AM

当我执行任务时会发生同样的情况,而任务c又会针对ab而不是在顶级项目中执行。

> show c/clean
[info] a/*:clean
[info]  ()
[info] b/*:clean
[info]  ()
[info] c/*:clean
[info]  ()
[success] Total time: 0 s, completed Oct 22, 2014 9:34:26 AM

a或中执行任务时b,它仅在项目内运行。

> show a/clean
[info] ()
[success] Total time: 0 s, completed Oct 22, 2014 9:34:43 AM

任务是否在aggregate项目中执行是由aggregate范围为项目和/或任务的键控制的

> show aggregate
[info] a/*:aggregate
[info]  true
[info] b/*:aggregate
[info]  true
[info] c/*:aggregate
[info]  true
[info] aggregate-dependson/*:aggregate
[info]  true

汇总所述更改它

在这种情况下,在进行聚合的项目(即根项目)中,您可以控制每个任务的聚合。(...)aggregate inupdate是作用于更新任务的聚合键。

下面,我更改了c模块和clean任务的键,因此clean不再在aggregated模块a和中执行b

> set aggregate in (c, clean) := false
[info] Defining c/*:clean::aggregate
[info] The new value will be used by no settings or tasks.
[info] Reapplying settings...
[info] Set current project to aggregate-dependson (in build file:/Users/jacek/sandbox/aggregate-dependsOn/)
> show c/clean
[info] ()
[success] Total time: 0 s, completed Oct 22, 2014 9:39:13 AM

的其他任务c不受影响,仍在执行任务caggregate模块中将运行该任务

> show c/libraryDependencies
[info] a/*:libraryDependencies
[info]  List(org.scala-lang:scala-library:2.10.4)
[info] b/*:libraryDependencies
[info]  List(org.scala-lang:scala-library:2.10.4)
[info] c/*:libraryDependencies
[info]  List(org.scala-lang:scala-library:2.10.4)

虽然aggregate为sbt任务设置了一个依赖关系,以便它们在其他aggregated模块中执行,但dependsOn设置了CLASSPATH依赖关系,即dependsOned模块中的代码在一个中可见dependsOn(对不起“新”字)。

假设b有一个主要对象如下:

object Hello extends App {
  println("Hello from B")
}

Hello对象保存b/hello.scala,即在b模块

由于c已定义为dependsOn b(参见build.sbt上文),因此该Hello对象在中可见b(因为它属于模块),但在中也是可见的c

> b/run
[info] Running Hello
Hello from B
[success] Total time: 0 s, completed Oct 22, 2014 9:46:44 AM
> c/runMain Hello
[info] Running Hello
Hello from B
[success] Total time: 0 s, completed Oct 22, 2014 9:46:58 AM

(我不得不使用runMainc作为run单独看不到类,我无法解释)。

由于该类在模块中可见,因此a最终尝试运行该任务java.lang.ClassNotFoundException: Hello

> a/runMain Hello
[info] Updating {file:/Users/jacek/sandbox/aggregate-dependsOn/}a...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Running Hello
[error] (run-main-6) java.lang.ClassNotFoundException: Hello
java.lang.ClassNotFoundException: Hello
    at java.lang.ClassLoader.findClass(ClassLoader.java:530)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[trace] Stack trace suppressed: run last a/compile:runMain for the full output.
java.lang.RuntimeException: Nonzero exit code: 1
    at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last a/compile:runMain for the full output.
[error] (a/compile:runMain) Nonzero exit code: 1
[error] Total time: 0 s, completed Oct 22, 2014 9:48:15 AM

重新定义adependsOn bin build.sbt,异常消失。

您应该阅读官方文档中的多项目构建

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对于两台不同的计算机,是否使用相同的无线鼠标+键盘(Logitech Unifying)?

来自分类Dev

使用“ this”关键字是否多余?爪哇

来自分类Dev

AWS:云形成:是否可以使用多个“ DependsOn”?

来自分类Dev

Ruby Ractors是否与Python的MultiProcessing模块相同?

来自分类Dev

使用互斥对象“使用”时,“尝试最后发布”是否多余?

来自分类Dev

使用可尾游标时,hint({$ natural:1})是否多余?

来自分类Dev

使用Linq检查XML文件是否丢失或多余的记录

来自分类Dev

使用Protobuf,用[IgnoreDataMember]标记属性是否多余?

来自分类Dev

对于程序的不同运行,全局变量的地址是否相同?

来自分类Dev

对于不同的密钥和消息对,HMAC输出是否可以相同

来自分类Dev

“捕获”和“已交付”对于信号是否表示相同的意思?

来自分类Dev

在#!/ usr / bin / python3之后声明#-*-编码:utf-8-*-是否多余?

来自分类Dev

在#!/ usr / bin / python3之后声明#-*-编码:utf-8-*-是否多余?

来自分类Dev

让几个模块使用相同的mongo实例

来自分类Dev

使用Jest模拟相同模块的不同值

来自分类Dev

使用相同的内存模块有什么好处?

来自分类Dev

跨模块重复使用相同的视图

来自分类Dev

writeUTF之后的多余字符

来自分类Dev

对于比较相同的类,是否真的有必要对相同的对象进行散列处理?

来自分类Dev

使用jdeps对于具有多版本实现模块,但是根模块不

来自分类Dev

在每个if语句之后使用exit()是否明智?

来自分类Dev

即使对于未定义为同步的方法,节点的加密模块是否也会阻塞?

来自分类Dev

如果与外键约束一起使用,“非空”约束是否多余?

来自分类Dev

为功能工程编写函数时使用df.copy()是否多余?

来自分类Dev

使用pygame运行python程序时,是否可以删除多余的窗口?

来自分类Dev

当原始查询使用ORDER BY子句时,LINQ .OrderBy()。ThenBy()运算符是否多余?

来自分类Dev

在 group by 之后检查每组的两列是否相同

来自分类Dev

对于模板类Foo方法的参数,“ Foo&”和“ Foo <T>&”是否相同?

来自分类Dev

对于大型和小型btree,btree中每个节点的密钥计数是否平均相同?

Related 相关文章

  1. 1

    对于两台不同的计算机,是否使用相同的无线鼠标+键盘(Logitech Unifying)?

  2. 2

    使用“ this”关键字是否多余?爪哇

  3. 3

    AWS:云形成:是否可以使用多个“ DependsOn”?

  4. 4

    Ruby Ractors是否与Python的MultiProcessing模块相同?

  5. 5

    使用互斥对象“使用”时,“尝试最后发布”是否多余?

  6. 6

    使用可尾游标时,hint({$ natural:1})是否多余?

  7. 7

    使用Linq检查XML文件是否丢失或多余的记录

  8. 8

    使用Protobuf,用[IgnoreDataMember]标记属性是否多余?

  9. 9

    对于程序的不同运行,全局变量的地址是否相同?

  10. 10

    对于不同的密钥和消息对,HMAC输出是否可以相同

  11. 11

    “捕获”和“已交付”对于信号是否表示相同的意思?

  12. 12

    在#!/ usr / bin / python3之后声明#-*-编码:utf-8-*-是否多余?

  13. 13

    在#!/ usr / bin / python3之后声明#-*-编码:utf-8-*-是否多余?

  14. 14

    让几个模块使用相同的mongo实例

  15. 15

    使用Jest模拟相同模块的不同值

  16. 16

    使用相同的内存模块有什么好处?

  17. 17

    跨模块重复使用相同的视图

  18. 18

    writeUTF之后的多余字符

  19. 19

    对于比较相同的类,是否真的有必要对相同的对象进行散列处理?

  20. 20

    使用jdeps对于具有多版本实现模块,但是根模块不

  21. 21

    在每个if语句之后使用exit()是否明智?

  22. 22

    即使对于未定义为同步的方法,节点的加密模块是否也会阻塞?

  23. 23

    如果与外键约束一起使用,“非空”约束是否多余?

  24. 24

    为功能工程编写函数时使用df.copy()是否多余?

  25. 25

    使用pygame运行python程序时,是否可以删除多余的窗口?

  26. 26

    当原始查询使用ORDER BY子句时,LINQ .OrderBy()。ThenBy()运算符是否多余?

  27. 27

    在 group by 之后检查每组的两列是否相同

  28. 28

    对于模板类Foo方法的参数,“ Foo&”和“ Foo <T>&”是否相同?

  29. 29

    对于大型和小型btree,btree中每个节点的密钥计数是否平均相同?

热门标签

归档