Как указать другой преобразователь для определенных зависимостей - PullRequest
1 голос
/ 04 августа 2020

Я оказался в ситуации, когда мне нужно указать настраиваемый преобразователь для моего проекта SBT, но только для загрузки 1 или 2 зависимостей. Я хочу, чтобы все другие зависимости были извлечены из репозитория Maven.

Вот мой build.sbt файл:

...Project definition...

resolvers := Seq(
  "Maven" at "https://repo1.maven.org/"
)

//Akka dependencies
libraryDependencies ++= Seq(
  "com.typesafe.akka" %% "akka-actor" % akkaActorsVersion,
  "com.typesafe.akka" %% "akka-testkit" % akkaActorsVersion % Test,
  "com.typesafe.akka" %% "akka-stream" % akkaStreamsVersion,
  "com.typesafe.akka" %% "akka-stream-testkit" % akkaStreamsVersion % Test,
  "com.typesafe.akka" %% "akka-http" % akkaHttpVersion,
  "com.typesafe.akka" %% "akka-http-testkit" % akkaHttpVersion % Test,
  "com.datastax.cassandra" % "cassandra-driver-core" % "3.3.0",
  "com.typesafe.akka" %% "akka-http-spray-json" % akkaHttpVersion,
  "io.spray" %% "spray-json" % "1.3.5",
  "de.heikoseeberger" %% "akka-http-circe" % "1.23.0",
  "io.circe" %% "circe-generic" % "0.10.0",
  "com.pauldijou" %% "jwt-core" % "0.13.0",
  "com.pauldijou" %% "jwt-circe" % "0.13.0",
  "org.slf4j" % "slf4j-simple" % "1.6.4",
  "com.microsoft.azure" % "azure-storage" % "8.4.0",
  "com.datastax.cassandra" % "cassandra-driver-extras" % "3.1.4",
  "io.jvm.uuid" %% "scala-uuid" % "0.3.0",
  "org.scalatest" %% "scalatest" % "3.0.5" % "test",
  "org.cassandraunit" % "cassandra-unit" % "3.1.1.0" % "test",
  "io.monix" %% "monix" % "3.0.0-8084549",
  "org.bouncycastle" % "bcpkix-jdk15on" % "1.48"
)

resolvers := Seq("Artifactory" at "http://10.3.1.6:8081/artifactory/libs-release-local/")

Credentials += Credentials("Artifactory Realm", "10.3.1.6", ARTIFACTORY_USER, ARTIFACTORY_PASSWORD)
  
libraryDependencies ++= 
    Seq(
      "com.org" % "common-layer_2.11" % "0.3",
    )

Однако сборка не выполняется с ошибками, которые говорят, что SBT пытается получить библиотеки из Artifactory вместо Maven. Например, зависимость драйвера Cassandra

unresolved dependency: com.datastax.cassandra#cassandra-driver-extras;3.1.4: Artifactory: unable to get resource for com/datastax/cassandra#cassandra-driver-extras;3.1.4: res=http://10.3.1.6:8081/artifactory/libs-release-local/com/datastax/cassandra/cassandra-driver-extras/3.1.4/cassandra-driver-extras-3.1.4.pom

Я просмотрел inte rnet и документацию, и я не вижу четкого способа справиться с этим, хотя я удивлен, потому что это похоже на общая проблема.

Есть идеи о том, как я могу применить приоритеты / порядок резолверов в SBT?

1 Ответ

3 голосов
/ 04 августа 2020

Обратите внимание, что когда вы выполняете

resolvers := Seq("resolver" at "https://path")

, вы переопределяете существующие определяемые пользователем дополнительные преобразователи. Поэтому, если вы выполняете:

resolvers := Seq("resolver1" at "https://path1") 
resolvers := Seq("resolver2" at "https://path2")

, вы заканчиваете только с resolver2.

Чтобы иметь оба преобразователя, вам нужно сделать что-то вроде:

resolvers ++= Seq(
  "resolver1" at "https://path1",
  "resolver2" at "https://path2"
)

SBT выполняет поиск зависимостей в соответствии с порядком указанных преобразователей. Это означает, что в данном примере он сначала будет искать в resolver1, и только если он не найдет, он будет go в resolver2.

Еще одна вещь, которую вам нужно знать, это то, что SBT предопределил резолверы.

Подробнее о резольверах sbt можно узнать по адресу: https://www.scala-sbt.org/1.x/docs/Resolvers.html

...