2017-10-04 3 views
1

SBT documentationによれば、 "プロジェクトは遅延型のプロジェクトタイプを宣言することによって定義されます。"SBTプロジェクトがなぜレイジー・ヴァルとして宣言されていますか?

これは確かに標準であり、私たちがやっていることですが、怠け者でなければならない理由があればどうしたらいいでしょうか。

lazy valの代わりに通常のvalを使用すると、と思われます。もちろん、厳密なvalを使用すると、プロジェクト定義が順番に初期化されます。つまり、前方参照は機能しません。つまり、プロジェクトを依存関係の順序で定義する必要があります。

比較的大きなビルドでは、相互依存関係のある53のプロジェクトがあり、順序が強制されるのは実際にはGood Thing™なので、レイジーヴァールを使用する実際の理由があるかどうかは疑問でした。

答えて

2

これは一般的な「ベストプラクティス」です。私は誰も明示的にこれを述べるのを見ていないが、私の経験から、この練習はsbtのいくつかの特徴に関連している。

  1. SBTは、どの*.sbtファイル
  2. SBTは、あなたが

は今、あなたはあなたを構築したいと想像複数のSBTのファイルにすべてのものの間の依存関係を作成することができます下

  • から*.sbtファイルトップを評価解析します読みやすいようにbuild.sbt。我々はいくつかの一般的な設定と3つのプロジェクト(根と2つのビルド)

    val root = project.in(file(".")) 
         .settings(commonSettings) 
         .aggregate(api, server) 
    
    val api = project.in(file("api")) 
         .settings(commonSettings) 
         .settings(name := "server") 
    
    val server= project.in(file("api")) 
         .settings(commonSettings) 
         .settings(name := "api") 
         .dependsOn(api) 
    
    val commonSettings = Seq(organization := "com.example") 
    

    SBTは、複数の物事がこのbuild.sbt

    1. で間違っapiserverモジュールで参照されているように起動しませんを持っています彼らは
    2. commonSettings
    3. を定義している前 rootプロジェクトは、すべてのプロジェクトでその定義の前に参照されている

    すべてを作成せずにlazyあなたのビルドファイルをリファクタリングするのが難しくなります。これは、すべてのsbtのドキュメントがすべてlazy valを使用する理由です。初心者のための混乱と不満を避けるため。

    希望するもの、 ムキ

  • 関連する問題