2017-08-21 2 views
2

discoveredMainClassesプロジェクトのすべてとSBTの従属サブプロジェクトをどのように累積できますか?サブプロジェクトの `discoveredMainClasses`を累計

は、例えば、私は1つのrootプロジェクトaggregate(foo, bar)

├── bar 
│   └── src 
│    └── main 
│     └── scala 
│      └── BarMain.scala 
├── build.sbt 
├── foo 
│   └── src 
│    └── main 
│     └── scala 
│      └── FooMain.scala 
├── project 
│   └── build.properties 
└── root 

のように見えるのプロジェクトを持って、私はdiscoveredMainClassesのために、以下の取得:

[info] foo/compile:discoveredMainClasses 
[info] List(MainFoo) 
[info] bar/compile:discoveredMainClasses 
[info] List(MainBar) 
[info] root/compile:discoveredMainClasses 
[info] List() 

のみdependsOn(foo, bar)は私が得ることroot 1で

> show discoveredMainClasses 
[info] * 

show root/discoveredMainClassesMainFooMainBarの両方を含めるにはどうすればよいですか?コンテキストの場合

、私はすなわちdiscoveredMainClassesからの出力に依存して他のタスクmakeBashScriptsnative-packager

答えて

1

を持っている核となるアイデアは、あなたがすべてを含めると、設定したいすべてのすべてのサブモジュールに依存モジュールを作成することですこのモジュールの設定。

これは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 

running example can be found hereでアプリケーションを構築して実行することができます。

歓声、 Muki

0

Mukiの答えはroot以外のすべてを含んでScopeFilterを定義し、そのようにメインクラスを蓄積するだろう@に代わる方法。これはどこにでも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, 
    ... 
)