2016-09-15 2 views
0

에서 여러 압축 아티팩트를 생성 나는 다음과 같은 프로젝트 구조가 있습니다한 SBT 모듈

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

모듈 응용 프로그램은 일부 스칼라 소스 코드를 포함하고 일반 jar 파일을 생성합니다.

문제는 config 모듈에 있습니다. 내가해야 할 일은 build.sbt에서 config에서 각 폴더를 가져 와서 내용을 별도의 zip 파일에 넣는 몇 가지 구성을 만드는 것입니다.

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 
으로 새로운 환경을 추가 위에서 볼 수

은 매우 간단합니다 - 만 새 폴더를 하나 개의 라인 build.sbt에 추가해야합니다.