我有一个使用 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