Вопрос: SBT Публикация не содержит зависимостей


У меня есть несколько проектов A, B, C. Некоторые из них являются библиотеками утилиты, а некоторые - приложениями.

Если у меня есть иерархия зависимостей A-> B-> C и использование publish-local, я должен включать в себя как зависимость B, так и C в A. Даже если A не использует ничего непосредственно из C (только по прокси). Это похоже на то, что все зависимости проекта B добавляются с предоставленной областью.

Почему эти зависимости не будут разрешены и добавлены в classpath?

Это не многопроект Build.scala (специально) У меня есть несколько упрощенных файлов сборки, и я хочу, чтобы они были самодостаточными.

Я запускаю повторный запуск команды (Revolver) при запуске приложения A.

/Магнус


Пример конфигурации В этом примере мне пришлось включить несколько библиотек (bouncy castle), которые действительно используются только в одной из следующих библиотек (все они опубликованы с локальным изданием)

"mollyware"         %% "fulla-utils"    % fulla,
"mollyware"         %% "brage-http"     % brage,
"mollyware"         %% "saga-domain"    % saga,

Конкатенированный файл build.sbt

scalaVersion := "2.10.3"

name := "mimer-idp"

organization := "mollyware"

version := "0.0.1"

import scalariform.formatter.preferences._

net.virtualvoid.sbt.graph.Plugin.graphSettings

// compile options
scalacOptions ++= Seq( 
  "-encoding", 
  "UTF-8", 
  "-optimise", 
  "-deprecation", 
  "-unchecked", 
  "-feature", 
  "-Yinline-warnings" 
)

javacOptions  ++= Seq( 
  "-Xlint:unchecked", 
  "-Xlint:deprecation" 
)

resolvers += Classpaths.typesafeReleases

resolvers ++= Seq(
  "Spray repo" at "http://repo.spray.io",
  "Spray nightlies" at "http://nightlies.spray.io",
  "Sonatype Snapshot Repo" at "http://oss.sonatype.org/content/repositories/snapshots/"
)

scalariformSettings

ScalariformKeys.preferences := FormattingPreferences()
    .setPreference( RewriteArrowSymbols, true )
    .setPreference( AlignParameters, true )
    .setPreference( AlignSingleLineCaseStatements, true )
    .setPreference( SpaceInsideParentheses, true )
    .setPreference( DoubleIndentClassDeclaration, true )
    .setPreference( PreserveDanglingCloseParenthesis, true )

libraryDependencies <<= scalaVersion { scala_version => 
  val akka          = "2.2.1"
  val ampq          = "1.3-SNAPSHOT"
  val spray         = "1.2.0"
  val sprayJson     = "1.2.5"
  val fulla         = "0.0.1"
  val brage         = "0.0.1"
  val saga          = "0.0.1"
  val scalaTest     = "2.0.RC2"
  val commons       = "1.7"
  val bcastle       = "1.49"
  Seq(
    "io.spray"          % "spray-routing"   % spray,
    "io.spray"          % "spray-can"       % spray,
    "io.spray"          % "spray-http"      % spray,
    "io.spray"          % "spray-client"    % spray,
    "io.spray"          % "spray-testkit"   % spray     % "test",
    "io.spray"          %% "spray-json"     % sprayJson,
    "com.typesafe.akka" %% "akka-actor"     % akka,
    "com.typesafe.akka" %% "akka-remote"    % akka,
    "com.github.sstone" %% "amqp-client"    % ampq,
    "mollyware"         %% "fulla-utils"    % fulla,
    "mollyware"         %% "brage-http"     % brage,
    "mollyware"         %% "saga-domain"    % saga,
    "commons-codec"     %  "commons-codec"  % commons,
    "org.scalatest"     %  "scalatest_2.10" % scalaTest % "test",
    "org.bouncycastle"  % "bcprov-jdk15on"  % bcastle,
    "org.bouncycastle"  % "bcpkix-jdk15on"  % bcastle
  )
}

import sbtassembly.Plugin._

import AssemblyKeys._

import spray.revolver.RevolverPlugin._

assemblySettings

assembleArtifact in packageScala := false

assembleArtifact in packageDependency := true

assemblyOption in packageDependency ~= { _.copy(includeScala = false) }

Revolver.settings

4


источник


Ответы:


Так вот что пошло не так: в какой-то момент я решил удалить -SNAPSHOT из моих версий сборки, когда я настраивал CI-сервер.

Это, в свою очередь, подразумевает, что публикация-локаль не будет обновлять пакет с той же версией.

Мне потребовалось некоторое время, чтобы понять, потому что я сделал это изменение некоторое время назад. Странность всего этого в том, что код все еще, казалось, обновлялся так или иначе, так как я получил класс не найденных исключений. Возможно ли, что банки переписаны, но не плющ или помы?

Я имел хорошую помощь Плагин sbt-dependency-graph  чтобы понять это в конце. Зависимости не указаны. И когда я натолкнулся на версию или изменился на моментальный снимок, он снова начал работать.


1