如何在SBT中积累项目的所有discoveredMainClasses及其依赖的子项目?
例如,我有一个项目,看起来
├── bar
│ └── src
│ └── main
│ └── scala
│ └── BarMain.scala
├── build.sbt
├── foo
│ └── src
│ └── main
│ └── scala
│ └── FooMain.scala
├── project
│ └── build.properties
└── root使用一个root项目aggregate(foo, bar),我得到了discoveredMainClasses的以下内容
[info] foo/compile:discoveredMainClasses
[info] List(MainFoo)
[info] bar/compile:discoveredMainClasses
[info] List(MainBar)
[info] root/compile:discoveredMainClasses
[info] List()只有一个root我能得到dependsOn(foo, bar)
> show discoveredMainClasses
[info] * 如何使show root/discoveredMainClasses同时包含MainFoo和MainBar
对于上下文,我还有其他依赖于discoveredMainClasses输出的任务,即土制包装机中的makeBashScripts
发布于 2017-08-27 11:03:08
其核心思想是创建一个依赖于您希望包含和配置该模块上所有设置的所有子模块的模块。
这会导致像这样的build.sbt
lazy val root = project.in(file("."))
// package the root module, but not the sub modules
.enablePlugins(JavaAppPackaging)
.settings(
name := "application",
// add the discoveredMainClasses to this project
discoveredMainClasses in Compile ++= (discoveredMainClasses in (client, Compile)).value,
discoveredMainClasses in Compile ++= (discoveredMainClasses in (server, Compile)).value
)
// include these modules in the resulting package
.dependsOn(client, server)
lazy val client = project.in(file("client"))
.settings(
name := "client"
)
lazy val server = project.in(file("server"))
.settings(
name := "server"
)(discoveredMainClasses in (client, Compile)).value从编译范围内的客户端项目访问discoveredMainClasses。
可以使用以下方法构建和运行应用程序
$ sbt universal:stage
$ ./target/universal/stage/bin/client-app
$ ./target/universal/stage/bin/server-app干杯,穆基
发布于 2017-12-20 19:19:18
@Muki回答的另一种方法是定义一个ScopeFilter,它包含除root之外的所有内容,并以这种方式积累主类。这样做的好处是不必在任何地方重复client、server。
生成的build.sbt
lazy val allCompileButRootFilter =
ScopeFilter(inAggregates(ThisProject, includeRoot = false), inConfigurations(Compile))
lazy val root = project.in(file("."))
.aggregate(client, server)
.enablePlugins(JavaAppPackaging)
.settings(
discoveredMainClasses in Compile ++=
discoveredMainClasses.all(allCompileButRootFilter).value.flatten,
...
)https://stackoverflow.com/questions/45798645
复制相似问题