1

プロジェクトで sbt 12.2 を使用するようにアップグレードしました。テストを project-unit.jar、project-integration.jar などの個別の jar にパッケージ化したいと考えています。

現在のフォルダー構造は次のとおりです。

src
 main
   ...
 test
   scala
     com.company.unit
     com.company.integration
     com.company.functional

どんな提案でも大歓迎です。

ありがとう

4

1 に答える 1

1

私はこれを行う方法を見つけました:

  1. 適切なテスト タイプのパッケージング タスクを作成します。

    val integrationPackaging = TaskKey[File]("package-integration")
    
  2. テスト設定にパッケージ設定を追加します。

    lazy val integrationTestSettings = createTestSettings("integration", IntegrationTests) ++ createPackageSettings("integration", IntegrationTests, integrationPackaging)
    
    private def createPackageSettings(testType: String, testConfiguration: Configuration, packagingTaskKey: TaskKey[sbt.File]) = {
      inConfig(testConfiguration)(Defaults.testSettings) ++
        Defaults.packageTaskSettings(packagingTaskKey, mappings in (Test, packageBin)) ++
        (artifactName in packagingTaskKey := {(scalaversion, moduleId, artifact) => "%s_%s-%s-%s.jar" format (moduleId.name, scalaversion.binary, buildVersion, testType)}) ++
        (mappings in packagingTaskKey ~= { (ms: Seq[(File,String)]) =>
          ms.filter { case (file, path) =>{ !file.getName.endsWith(".class") || file.getAbsolutePath.contains(testType) }
          }
        })
    }
    

パッケージ設定の作成で、次のことを行う必要があることに注意してください。

  • デフォルトのテスト設定を追加して、すべてのテスト設定が確実に継承されるようにします
  • デフォルトのテスト パッケージ タスク設定を追加します (Test packageBin のマッピングを使用)
  • artifactName を追加します (jar 名にしたいもの)
  • パッケージ タスク キー (上記の手順 1 で作成) の特定のマッピングを追加します。これが重要な点です。testType (例: "integration"、"unit"、または " Functional") が選択され、リソース ファイル (例: ".class" で終わらないファイル)
于 2013-05-08T21:38:16.813 に答える