累积子项目'discoveredMainClasses`

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了累积子项目'discoveredMainClasses`相关的知识,希望对你有一定的参考价值。

如何累积项目的所有discoveredMainClasses及其在SBT中的相关子项目?

例如,我有一个看起来像的项目

├── 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包含MainFooMainBar

对于上下文,我有其他任务依赖于discoveredMainClasses的输出,即makeBashScripts中的native-packager

答案

核心思想是创建一个模块,该模块依赖于您要包含的所有子模块,并配置此模块上的所有设置。

这导致像这样的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从Compile作用域中的客户端项目访问discoveredMainClasses。

您可以使用构建和运行应用程序

$ sbt universal:stage
$ ./target/universal/stage/bin/client-app
$ ./target/universal/stage/bin/server-app

一个running example can be found here

干杯,黑暗

另一答案

@ Muki回答的另一种方法是定义一个ScopeFilter,它包含除了root以外的所有内容并以这种方式累积主类。这样做的好处是不必在任何地方重复clientserver

由此产生的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,
    ...
  )

以上是关于累积子项目'discoveredMainClasses`的主要内容,如果未能解决你的问题,请参考以下文章

在Python中绘制累积增益曲线(ModuleNotFoundError:没有名为'scikitplot'的模块)

OpenTK - 累积缓冲区的可用性

高效管理项目的秘密武器:累积流图

AzureDevops 项目委员会累积流程图是不是仅限于 180 天的报告?

如何在python中的字典列表中查找项目的累积总和

Oracle SQL 累积产品