Ответ 1
Это интересный вопрос. Некоторое время назад мы добавили возможность добавить произвольные артефакты из пути сборки. (См. scaladocs)
Вариант 1 может выглядеть так. Обратите внимание, что это не работает так, как я ожидаю, поскольку некоторые сопоставления не точно подобраны native-packager:
// `show universal::stage:mappings` works properly
mappings in (Universal, stage) ++= {
// calculate provided dependencies.
val compileDep = (managedClasspath in Compile).value.toSet
val runtimeDep = (managedClasspath in Runtime).value.toSet
val provided = compileDep -- runtimeDep
// create mappings
fromClasspath(provided.toSeq, "jar", artifact => true)
}
Я предлагаю вариант варианта 1, предоставив среду сборки и решил, какие сопоставления добавить.
mappings in Universal ++= {
// a build environment
val env = buildEnv.value
// calculate provided dependencies.
val compileDep = (managedClasspath in Compile).value.toSet
val runtimeDep = (managedClasspath in Runtime).value.toSet
val provided = compileDep -- runtimeDep
// create mappings, depending on build environment
fromClasspath(provided.toSeq, "jar", _ => env == BuildEnv.Stage)
}
// add the dependencies to the start script as well
scriptClasspath ++= { /* similar code as above */}
Что я хотел бы сделать
Я надеялся, что смогу сделать что-то вроде этого
libraryDependencies += "com.google.guava" % "guava" % "19.0" % "provided"
mappings in (Universal, stage) ++= fromClasspath(
(managedClasspath in Compile).value,
"jar",
artifact => artifact.scope == "provided"
)
Это было невозможно, так как sbt Artifact не имеет доступа к области плюща (или я его не нашел).
Затем я попытался сделать это
libraryDependencies += "com.google.guava" % "guava" % "19.0" % "provided" extra("heroku" -> "true")
mappings in (Universal, stage) ++= fromClasspath(
(managedClasspath in Compile).value,
"jar",
artifact => artifact.extra.find(_ == "heroku")
.map(_.toBoolean)
.getOrElse(false)
)
который тоже не работал, поскольку, как кажется, SBT не передает атрибуты extra
из ModuleID в Artifact. Это оставило меня с описанным выше решением.