sbt 程序集创建的程序集文件中缺少类

  • 本文关键字:程序集 文件 创建 sbt jar sbt
  • 更新时间 :
  • 英文 :


我有一个使用 sbt 0.13.6 和程序集 0.12.0 插件来创建 farJar 的项目。我build.sbt是:

name := "test"
version := "0.0.1"
scalaVersion := "2.10.4"
libraryDependencies ++= Seq(
  ("org.apache.kafka" % "kafka_2.10" % "0.8.0" % "provided").
    exclude("javax.jms", "jms").
    exclude("com.sun.jdmk", "jmxtools").
    exclude("com.sun.jmx", "jmxri").
    exclude("org.slf4j", "slf4j-simple")
)

当我运行sbt assembly时,我得到一个名为 target/scala-2.10/test-assembly-0.0.1.jar 的文件,但它缺少一些 kafka 类,包括我在运行时需要的类:

> diff <(jar -tf /home/rief/.ivy2/cache/org.apache.kafka/kafka_2.10/jars/kafka_2.10-0.8.0.jar) <(jar -tf target/scala-2.10/test-assembly-0.0.1.jar) | grep "^<"
...
kafka/consumer/ZookeeperConsumerConnector$ZKRebalancerListener$$anonfun$kafka$consumer$ZookeeperConsumerConnector$ZKRebalancerListener$$closeFetchersForQueues$1.class
...

这是正确的行为吗?如何将kafka包含在我的胖罐中?

这是预期的行为。 % "provided"被跳过,因为它的目的是从容器中提供那些类,如Apache Spark,Kafka等。如果你想要它的所有内容,你可以这样做:

fullClasspath in assembly := (fullClasspath in Compile).value

最新更新