2016-09-15 7 views
0

から複数のzipアーティファクトをプロデュース:は、私は次のプロジェクト構造を有する1つのSBTモジュール

my-project/ 
    build.sbt 
    ... 
    app/ 
    ... 
    config/ 
    dev/ 
     file1.properties 
     file2.properties 
    test/ 
     file1.properties 
     file2.properties 
    prod/ 
     file1.properties 
     file2.properties 

モジュールのアプリはいくつかのScalaのソースコードが含まれており、平野jarファイルを生成します。

問題はconfigモジュールにあります。私がする必要があるのは、configから各フォルダを取り出し、その内容を別のzipファイルに入れるbuild.sbtでいくつかの設定を作成することです。

my-project-config-dev-1.1.zip ~> 
    file1.properties 
    file2.properties 
my-project-config-uat-1.1.zip ~> 
    file1.properties 
    file2.properties 
my-project-config-prod-1.1.zip ~> 
    file1.properties 
    file2.properties 

1.1プロジェクトの任意のバージョンで次のよう

結果があるべきです。

新しい環境と新しい設定ファイルを追加すると、より多くのzipファイルが作成されるような設定になります。別のタスクでは、これらのzipファイルはすべてNexusに公開する必要があります。

提案がありますか?

答えて

0

モジュールconfigを作成し、各環境ごとに別々のサブモジュールを作成することで問題を解決することができました。そのため、プロジェクトの構造は問題のとおりです。 build.sbtではすべてが適切な設定になります。

以下は、私が望むことを達成するために行ったことの一般的な考え方です。

lazy val config = (project in file("config")). 
    enablePlugins(UniversalPlugin). 
    settings(
    name := "my-project", 
    version := "1.1", 
    publish in Universal := { },  // disable publishing of config module 
    publishLocal in Universal := { } 
). 
    aggregate(configDev, configUat, configProd) 

lazy val environment = settingKey[String]("Target environment") 

lazy val commonSettings = makeDeploymentSettings(Universal, packageBin in Universal, "zip") ++ Seq( // set package format 
    name := "my-project-config", 
    version := "1.1", 
    environment := baseDirectory.value.getName,            // set 'environment' variable based on a configuration folder name 
    topLevelDirectory := None,                // set top level directory for each package 
    packageName in Universal := s"my-project-config-${environment.value}-${version.value}", // set package name (example: my-project-config-dev-1.1) 
    mappings in Universal ++= contentOf(baseDirectory.value).filterNot { case (_, path) => // do not include target folder 
    path contains "target" 
    } 
) 

lazy val configDev = (project in file("config/dev")).enablePlugins(UniversalPlugin).settings(commonSettings: _*) 
lazy val configUat = (project in file("config/uat")).enablePlugins(UniversalPlugin).settings(commonSettings: _*) 
lazy val configProd = (project in file("config/prod")).enablePlugins(UniversalPlugin).settings(commonSettings: _*) 

UniversalPluginは高度に構成可能ですが、最初はすべての設定オプションが明確ではない場合があります。私はそのドキュメントを読んで、ソースコードを調べることをお勧めします。

sbt config/universal:packageBin 

出版:実際には次のコマンドが発行された成果物パッケージへ

sbt config/universal:publish 

を新しい環境を追加する上で見ることができるようには非常に簡単です - 唯一の新しいフォルダと1つのラインbuild.sbtを追加する必要があります。

関連する問題