通过git访问SBT中包含的非SBT依赖项中的类



我需要在SBT构建中包含来自git的依赖项。我遵循了我在stackoverflow上发现的其他一些例子,并走到了这一步:

lazy val commonSettings = Seq(
  version := "0.1.0",
  scalaVersion := "2.10.5"
)
lazy val elastic = ProjectRef(uri("git://github.com/elastic/elasticsearch-hadoop.git"), "elasticsearch-hadoop")
// Library dependencies
lazy val indexer = (project in file("."))
  .settings(commonSettings: _*)
  .dependsOn(elastic)
  .settings(
  projectDependencies := {
    Seq(
      (projectID in elastic).value.
        exclude("commons-beanutils", "commons-beanutils-core").
        exclude("commons-collections", "commons-collections").
        exclude("commons-logging", "commons-logging").
        exclude("com.esotericsoftware.minlog", "minlog").
        exclude("org.apache.hadoop", "hadoop-yarn-common-2.2.0").
        exclude("org.apache.spark", "spark-network-common_2.10").
        exclude("org.apache.spark", "spark-sql_2.10"))
  })
  .settings(
  libraryDependencies ++=Seq(
    "org.apache.spark" %% "spark-core" % "1.6.1" % "provided",
    "org.apache.spark" %% "spark-sql" % "1.6.1" % "provided"
  ))

当运行程序集时,我得到以下错误:

[error] /Users/nandanrao/Documents/Relink/indexer/indexer.scala:4: object elasticsearch is not a member of package org
[error] import org.elasticsearch.spark.sql._

在我发现的其他例子中,也就是我所遵循的模式中,我相信依赖关系也是SBT项目。elasticsearch hadoop库是一个用gradle构建的java项目,其中嵌入了一个scala项目,即Spark部分,显然整个项目不是用SBT构建的。

所以我不确定我是否已经导入了这个项目,尽管我可能已经导入了,我也不确定这些类排除是否有效。我希望有人能透露一些信息?

AFAIK,这是不允许的:SBT只能通过Git导入依赖项,而Git本身就是用SBT构建的。您可以将它发布到本地存储库,并像往常一样使用libraryDependencies依赖它。唯一的问题是,如果你对依赖项进行了更改,你必须重新发布它。

最新更新