大家好, 我正在使用SBT来构建我的项目,这是我项目的结构。
HiveGenerator
├── build.sbt
├---lib
├── project
│ ├──
│ ├── assembly.sbt
│ └── plugins.sbt
├──
├──
└── src
└── main
└── scala
└── Main.scala
但是我面临这个错误“java.lang.ClassNotFoundException:package.classname”,无论我构建它多少次。 我用过, sbt清洁包 sbt清理程序集,但没有运气。我的类总是从jar中丢失。
这是我的build.sbt
lazy val root = (project in file(".")).
settings(
name := "kafkaToMaprfs",
version := "1.0",
scalaVersion := "2.10.5",
mainClass in Compile := Some("classname")
)
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-hive_2.10" % "1.6.1",
"org.apache.spark" % "spark-core_2.10" % "1.6.1",
"org.apache.spark" % "spark-sql_2.10" % "1.6.1",
"com.databricks" % "spark-avro_2.10" % "2.0.1",
"org.apache.avro" % "avro" % "1.8.1",
"org.apache.avro" % "avro-mapred" % "1.8.1",
"org.apache.avro" % "avro-tools" % "1.8.1",
"org.apache.spark" % "spark-streaming_2.10" % "1.6.1",
"org.apache.spark" % "spark-streaming-kafka_2.10" % "1.6.1",
"org.codehaus.jackson" % "jackson-mapper-asl" % "1.9.13",
"org.openrdf.sesame" % "sesame-rio-api" % "2.7.2",
"log4j" % "log4j" % "1.2.17",
"com.twitter" % "bijection-avro_2.10" % "0.7.0"
)
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
{
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}
}
这是我的assembly.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")
plugins.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "0.7.0")
resolvers += Resolver.url("bintray-sbt-plugins", url("http://dl.bintray.com/sbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)
resolvers += "OSS Sonatype" at "https://repo1.maven.org/maven2/"
但是,我无法构建一个胖罐,或者你可以像在maven中一样说jar-with-dependencies.jar。
我们已经
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
这帮助我实现了这一目标。
我的问题是, * 1。为什么我不打造一个包含所有类的jar?
2.我应该使用哪些命令在sbt中创建一个具有依赖关系的jar?
3.我们在sbt中有什么等同于“descriptorRefs”来做魔术吗?*
最后一个问题,我没有找到答案, 如果我们总是使用spark-submit来实现它(不考虑本地或集群模式),我们不能用sbt实现正确的输出吗?
提前致谢。
答案 0 :(得分:0)
尝试删除~/.ivy2/
或将其移开并重建,让所有内容从网上重新加载。当然,您还必须重建所有有助于组装的本地构建。
我找到了你的帖子,因为我有同样的问题,这解决了它。它可能无法解决你的问题,但它确实解决了这种性质的问题(我已经看到了很多)。