2016-03-29 1 views
3

Во всех примерах, которые я видел относительно многомодульных сборников и sbt-native-packager, все они объединяют подпроекты в единый пакет. У меня есть суб-проекты, каждый из которых предоставляет микросервис. Я считаю, что каждый из них должен иметь собственный собственный пакет, но я не вижу, как это сделать, и у меня есть одна команда для всех подпроектов.как определить многопроектную сборку с sbt-native-packager, которая создает RPM для каждого подпроекта

ответ

2

Это оказывается простым. Просто укажите настройки нативного пакета для каждого из подпроектов, которые вы хотите упаковать, и не предоставляете никаких в агрегирующем проекте.

Я проверил путем изменения https://github.com/muuki88/sbt-native-packager-examples/tree/master/multi-module-build соответственно:

import NativePackagerKeys._ 

name := "mukis-fullstack" 

// used like the groupId in maven 
organization in ThisBuild := "de.mukis" 

// all sub projects have the same version 
version in ThisBuild := "1.0" 

scalaVersion in ThisBuild := "2.11.2" 

// common dependencies 
libraryDependencies in ThisBuild ++= Seq(
    "com.typesafe" % "config" % "1.2.0" 
) 

// this is the root project, aggregating all sub projects 
lazy val root = Project(
    id = "root", 
    base = file("."), 
    // configure your native packaging settings here 
// settings = packageArchetype.java_server++ Seq(
//  maintainer := "John Smith <[email protected]>", 
//  packageDescription := "Fullstack Application", 
//  packageSummary := "Fullstack Application", 
     // entrypoint 
//  mainClass in Compile := Some("de.mukis.frontend.ProductionServer") 
// ), 
    // always run all commands on each sub project 
    aggregate = Seq(frontend, backend, api) 
) dependsOn(frontend, backend, api) // this does the actual aggregation 

// --------- Project Frontend ------------------ 
lazy val frontend = Project(
    id = "frontend", 
    base = file("frontend"), 
    settings = packageArchetype.java_server++ Seq(
     maintainer := "John Smith <[email protected]>", 
     packageDescription := "Frontend appplication", 
     mainClass in Compile := Some("de.mukis.frontend.ProductionServer") 
    ) 
) dependsOn(api) 


// --------- Project Backend ---------------- 
lazy val backend = Project(
    id = "backend", 
    base = file("backend"), 
    settings = packageArchetype.java_server++ Seq(
     maintainer := "John Smith <[email protected]>", 
     packageDescription := "Fullstack Application", 
     packageSummary := "Fullstack Application", 
     // entrypoint 
     mainClass in Compile := Some("de.mukis.frontend.ProductionServer") 
    ) 
) dependsOn(api) 

// --------- Project API ------------------ 
lazy val api = Project(
    id = "api", 
    base = file("api") 

Результаты:

debian:packageBin 
...misc messages elided... 
[info] dpkg-deb: building package `frontend' in `../frontend_1.0_all.deb'. 
[info] dpkg-deb: building package `backend' in `../backend_1.0_all.deb'.