#scala #sbt #apache-spark
#scala #sbt #apache-spark
Вопрос:
Банки spark были успешно опубликованы в локальном репозитории:
sbt publish-local
Вот выдержка из spark-core — все выглядит нормально:
[информация] опубликовал spark-core_2.10 для C:Userss80035683.m2repositoryorgapachesparkspark-core_2.101.1.0-SNAPSHOTspark-core_2.10-1.1.0-SNAPSHOT-javadoc.jar [информация] опубликовано spark-core_2.10 для C:Userss80035683.ivy2localorg.apache.sparkspark-core_2.101.1.0-SNAPSHOTpomsspark-core_2.10.pom [информация] опубликовано spark-core_2.10 для C:Userss80035683.ivy2localorg.apache.sparkspark-core_2.101.1.0-SNAPSHOTjarsspark-core_2.10.jar [информация] опубликовано spark-core_2.10 для C:Userss80035683.ivy2localorg.apache.sparkspark-core_2.101.1.0-SNAPSHOTsrcsspark-core_2.10-sources.jar [info] опубликовал spark-core_2.10 для C:Userss80035683.ivy2localorg.apache.sparkspark-core_2.101.1.0-SNAPSHOTdocsspark-core_2.10-javadoc.jar [информация] опубликовал ivy, чтобы C:Userss80035683.ivy2localorg.apache.sparkspark-core_2.101.1.0-SNAPSHOTivysivy.xml
В частности: вот один файл в .m2:
C:Userss80035683.m2repositoryorgapachesparkspark-core_2.101.1.0-SNAPSHOT>dir
Directory of C:Userss80035683.m2repositoryorgapachesparkspark-core_2.101.1.0-SNAPSHOT
06/26/2014 04:25 PM <DIR> .
06/26/2014 04:25 PM <DIR> ..
06/26/2014 04:25 PM 1,180,476 spark-core_2.10-1.1.0-SNAPSHOT-javadoc.jar
06/26/2014 04:24 PM 808,815 spark-core_2.10-1.1.0-SNAPSHOT-sources.jar
06/26/2014 02:27 PM 5,781,917 spark-core_2.10-1.1.0-SNAPSHOT.jar
06/26/2014 05:03 PM 13,436 spark-core_2.10-1.1.0-SNAPSHOT.pom
Проблема возникает при попытке использовать jar в клиентском проекте.
Вот выдержка из клиентской сборки.sbt:
val sparkVersion = "1.1.0-SNAPSHOT"
..
libraryDependencies = Seq(
"org.apache.spark" % "spark-core_2.10" % sparkVersion % "compile->default" withSources(),
"org.apache.spark" % "spark-sql_2.10" % sparkVersion % "compile->default" withSources()
..
resolvers = Seq(
"Apache repo" at "https://repository.apache.org/content/repositories/releases",
"Local Repo" at Path.userHome.asFile.toURI.toURL "/.m2/repository",
Resolver.mavenLocal
)
Итак: у нас есть :
- хороший локальный репозиторий
- build.sbt, который ссылается на локальный репозиторий
Но когда мы делаем:
sbt package
Мы получаем неразрешенную зависимость от тех же артефактов spark, которые мы только что опубликовали:
[info] Loading project definition from C:appshsparkproject
[info] Set current project to hspark (in build file:/C:/apps/hspark/)
[info] Updating {file:/C:/apps/hspark/}hspark...
[info] Resolving org.scala-lang#scala-library;2.10.4 ...
[info] Resolving org.apache.spark#spark-core_2.10;1.1.0-SNAPSHOT ...
[info] Resolving org.apache.spark#spark-sql_2.10;1.1.0-SNAPSHOT ...
[info] Resolving org.scala-lang#scala-compiler;2.10.4 ...
[info] Resolving org.scala-lang#scala-reflect;2.10.4 ...
[info] Resolving org.scala-lang#jline;2.10.4 ...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: org.apache.spark#spark-core_2.10;1.1.0-SNAPSHOT: configuration not found in org.apache.spark#spark-core_2.10;1.1.0-SNAPSHOT: 'default'. It was required from default#hspark_2.10;0.1.0-SNAPSHOT compile
[warn] :: org.apache.spark#spark-sql_2.10;1.1.0-SNAPSHOT: configuration not found in org.apache.spark#spark-sql_2.10;1.1.0-SNAPSHOT: 'default'. It was required from default#hspark_2.10;0.1.0-SNAPSHOT compile
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
sbt.ResolveException: unresolved dependency: org.apache.spark#spark-core_2.10;1.1.0-SNAPSHOT: configuration not found in org.apache.spark#spark-core_2.10;1.1.0-SNAPSHOT: 'default'. It was required from default#hspark_2.10;0.1.0-SNAPSHOT compile
unresolved dependency: org.apache.spark#spark-sql_2.10;1.1.0-SNAPSHOT: configuration not found in org.apache.spark#spark-sql_2.10;1.1.0-SNAPSHOT: 'default'. It was required from default#hspark_2.10;0.1.0-SNAPSHOT compile
at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:217)
at sbt.IvyActions$$anonfun$update$1.apply(IvyActions.scala:126)
..
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
[error] (*:update) sbt.ResolveException: unresolved dependency: org.apache.spark#spark-core_2.10;1.1.0-SNAPSHOT: configuration not found in org.apache.spark#spark-core_2.10;1.1.0-SNAPSHOT: 'default'. It was required from default#hspark_2.10;0.1.0-SNAPSHOT compile
[error] unresolved dependency: org.apache.spark#spark-sql_2.10;1.1.0-SNAPSHOT: configuration not found in org.apache.spark#spark-sql_2.10;1.1.0-SNAPSHOT: 'default'. It was required from default#hspark_2.10;0.1.0-SNAPSHOT compile
[
[error] (*:update) sbt.ResolveException: unresolved dependency: org.apache.spark#spark-core_2.10;1.1.0-SNAPSHOT: configuration not found in org.apache.spark#spark-core_2.10;1.1.0-SNAPSHOT: 'default'. It was required from default#hspark_2.10;0.1.0-SNAPSHO
ОБНОВЛЕНИЕ На основе ответа @lpiepiora кажется, что удаление compile-> default (на удивление) имеет значение. Вот доказательства до сих пор.
(С использованием плагина dependency-graph):
Выполнено обновление. [информация] по умолчанию: hspark_2.10:0.1.0-МОМЕНТАЛЬНЫЙ СНИМОК [S] [info]
-org.apache.spark:spark-core_2.10:1.1.0-МОМЕНТАЛЬНЫЙ СНИМОК [S]
Ответ №1:
Попробуйте удалить сопоставление compile->default
для ваших зависимостей. В любом случае это избыточно, как говорится в документации:
Конфигурация без сопоставления (без «->») сопоставляется с «default» или «compile». -> требуется только при сопоставлении с конфигурацией, отличной от этих.
Поэтому объявите свои зависимости следующим образом:
libraryDependencies = Seq(
"org.apache.spark" % "spark-core_2.10" % sparkVersion withSources(),
"org.apache.spark" % "spark-sql_2.10" % sparkVersion withSources()
)
и они должны разрешиться.
Комментарии:
1. Похоже, это работает. Я делаю немного больше проверок. Ожидайте принятия в ближайшее время.
2. На самом деле это, похоже, не работает. Вы проверяли это?
3. Да, у меня есть. Опубликовал локально, и у него был другой проект, использующий его. Я проверю это снова и куда-нибудь помещу. Так что, возможно, вы можете протестировать его в своей конфигурации.
4. «sparkVersion withSources ()» не работал. Мне пришлось удалить withSources()
5. @javadba это работает для меня — какую ошибку вы получили при использовании
withSources()
? Я использую sbt 0.13.5.