В моем искровом приложении я пытаюсь использовать fluentd-scala-logger
, для чего мне пришлось включить дополнительную зависимость в свой build.sbt
Это две строки, которые я добавил в свой build.sbt
:
resolvers += "Apache Maven Central Repository" at "https://repo.maven.apache.org/maven2/"
"org.fluentd" %% "fluent-logger-scala" % "0.7.0"
Мой финальный build.sbt
выглядит так:
name := "sample"
version := "1.4"
scalaVersion := "2.11.8"
resolvers += "Apache Maven Central Repository" at "https://repo.maven.apache.org/maven2/"
libraryDependencies ++= Seq("org.elasticsearch" %% "elasticsearch-spark" % "2.1.2", "org.apache.spark" %% "spark-sql" % "2.1.2", "org.apache.kafka" % "kafka-clients" % "2.4.1", "org.fluentd" %% "fluent-logger-scala" % "0.7.0")
Как только я делаю пакет sbt
для объединения моего приложения spark в банку, я сталкиваюсь со следующей проблемой:
object tools is not a member of package scala
[error] import scala.tools.nsc.io.File
Я не сталкивался с этим, когда мой sbt
ранее выглядел так (без плавной зависимости):
name := "sample"
version := "1.4"
scalaVersion := "2.11.8"
libraryDependencies ++= Seq("org.elasticsearch" %% "elasticsearch-spark" % "2.1.2", "org.apache.spark" %% "spark-sql" % "2.1.2", "org.apache.kafka" % "kafka-clients" % "2.4.1")
Является ли строка распознавателей причиной проблемы? или я что-то совсем другое упускаю.
Я использую sbt
версию 1.4.5 и версию Scala: 2.11.8.
Выбор предыдущего sbt, как предлагает @LuisMiguelMejíaSuárez, устраняет для меня ошибку «объектные инструменты». Я использую intellij, и он переопределяет версию sbt, настроенную в проекте, и вместо этого использует последнюю версию, если вы не скажете использовать версию из build.properties
.
Я не уверен, что вызывает это, но я нашел решение. Пожалуйста, попробуйте добавить зависимость следующим образом:
libraryDependencies += "org.fluentd" %% "fluent-logger-scala" % "0.7.0" intransitive()
Он будет импортировать эту зависимость без ее зависимостей.
Сказав это, я посмотрел на зависимости этой библиотеки и попытался исключить их все 1 на 1:
libraryDependencies += "org.fluentd" %% "fluent-logger-scala" % "0.7.0" excludeAll(
ExclusionRule("org.msgpack", "msgpack"),
ExclusionRule("org.slf4j", "slf4j-api"),
ExclusionRule("ch.qos.logback", "logback-classic"),
ExclusionRule("junit", "junit"),
)
но это не сработало. Так что я действительно не могу это объяснить.
Было бы здорово, если бы было объяснение. Но все равно спасибо, моя ошибка исчезла. :)
@AkshatChaturvedi Хотел бы я совершенно неправильно понять, что здесь происходит. Я просто хотел знать, работает ли он без зависимостей, так что это мои попытки. Я предполагаю, что один из плагинов этого пакета переопределяет какое-то пространство имен, но я не уверен.
Это довольно странная ошибка, я бы порекомендовал вам три вещи. 1) Попробуйте несколько версий sbt, таких как
1.4.4
,1.3.13
и т. д. 2) Спросите в Gitter Room (возможно, также в Scala room). 3) Поиск в проблемах github, если об этом уже сообщалось.