fullRunTask с нестандартным проектом в sbt - PullRequest
1 голос
/ 09 мая 2019

У меня есть несколько проектов, определенных в build.sbt с разными источниками. Я хочу сохранить корневой проект таким, какой он есть, с его собственным исходным набором (и classpath), но добавить задачу sbt для компиляции и запуска проекта не по умолчанию.

Вот (укороченный) build.sbt:

lazy val root = project in file(".")

lazy val anotherModule = project in file("modules/another")

lazy val runAnother = taskKey[Unit]("Run a task from anotherModule")
fullRunTask(initialImport, Compile, "another.module.Main")

another.module фактически находится в modules/another/src и поэтому не входит в корневой проект.

Когда sbt runAnother запущен, он не может найти another.module на пути к классам.

Я не хочу, чтобы проект root зависел от anotherModule, потому что, кроме этой задачи, код там не требуется корневому проекту.

Как мне запустить эту задачу с classpath указанного модуля?

1 Ответ

1 голос
/ 09 мая 2019

runner можно использовать вместо fullRunTask, например, так:

lazy val anotherModule = project in file("modules/another")

lazy val runAnother = taskKey[Unit]("Run task with the classpath of runAnother sub-project")
runAnother := {
  (runner in Compile).value.run(
    mainClass = "another.module.Main",
    classpath = (anotherModule / Compile / fullClasspath).value.files,
    options = Array[String](),
    log = streams.value.log
  )
}

Обратите внимание, как мы получаем доступ к classpath подпроекта anotherModule

classpath = (anotherModule / Compile / fullClasspath).value.files

Теперь sbt runAnother должен иметь возможность запускать подпроект anotherModule, в то время как по умолчанию root проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...