Подтвердить что ты не робот

SBT-сборка пропускает некоторые подпроекты

У меня есть проект с несколькими модулями sbt, который настроен для сборки sbt. В этом проекте я хочу пропустить генерацию живого флага для подпроектов, которые не предназначены для исполнения, чтобы ускорить наращивание. Но я не уверен, как это делается.

4b9b3361

Ответ 1

Просто не включайте настройки сборки в подмодулях, которые этого не требуют.

Например, используя sbt 0.13.5 и sbt-assembly 0.11.2, здесь представлен многомодульный проект. Если вы запустите assembly в корне, просто проект "app" будет превращен в жирную банку.

project/Build.scala

import sbt._
import Keys._
import sbtassembly.Plugin.assemblySettings

object MyApp extends Build {

  lazy val root = Project("root", file(".")).aggregate(common, app)

  lazy val common = Project("common", file("common"))

  lazy val app = Project("app", file("app")).settings(assemblySettings: _*).dependsOn(common)

}

common/src/main/scala/com/example/common/Hello.scala

package com.example.common

object Hello {
  def hello(name: String): String = s"Hello, $name"
}

app/src/main/scala/com/example/hello/App.scala

package com.example.hello

import com.example.common.Hello._

object Main extends App {
  println(hello(args(0)))
}

Ответ 2

Если вы используете файл build.sbt, вы можете отключить модуль сборки для модуля следующим образом:

lazy val module = (project in file("module"))
  .disablePlugins(sbtassembly.AssemblyPlugin)
  .settings(
    ...
  )

Это также работает для корневого модуля:

lazy val 'project-name' = (project in file("."))
  .disablePlugins(sbtassembly.AssemblyPlugin)
  .aggregate('module-1', 'module-2')
  .settings(
    ...
  )

(Ответ найден благодаря комментарию @tobym в другом ответе.)