我用常春藤解决Kafka相依问题有困难。
我正在尝试在junit测试中创建kafka服务器。 TestUtils.createServer(kafkaConfig, Time.SYSTEM);
这需要 kafka_2.11-0.10.2.1.jar
, kafka-clients-0.10.2.1-test.jar
,和 kafka_2.11-0.2.1-test.jar
在测试类路径上 kafka.utils.TestUtils
是在 *-test.jar
. 问题是我如何解决这个问题 *-test.jar
用常春藤和蚂蚁?在 ivy.xml
我有:
<configurations defaultconfigmapping="default>
<conf name="compile"/>
<conf name="test" extends="compile"/>
<conf name="master"/>
<conf name="sources"/>
<conf name="javadoc"/>
<conf name="runtime" extends="compile"/>
<conf name="default" extends="master,runtime"/>
</configurations>
...
<dependency org="org.apache.kafka" name="kafka-clients" rev="0.10.2.1" conf="compile->default"/>
<dependency org="org.apache.kafka" name="kafka_2.11" rev="0.10.2.1" conf="test->default">
<artifact name="kafka_2.11" ext="jar"/>
<artifact name="kafka_2.11" e:classifier="test" ext="jar"/>
</dependency>
<dependency org="org.apache.kafka" name="kafka-clients" rev="0.10.2.1" conf="test->default">
<artifact name="kafka-clients" ext="jar"/>
<artifact name="kafka-clients" e:classifier="test" ext="jar"/>
</dependency>
这个版本有类似的东西
<ivy:resolve log="quiet" conf="compile" transitive="false"/>
<ivy:cachepth pathid="test-classpath" conf="test" log="quiet"/>
这会导致 NoClassDefFoundError org/apache/kafka/test/TestUtils
.
我注意到conf被设置为“compile”,但是当我将test添加到列表中时,我得到了关于缺少类的其他错误。
1条答案
按热度按时间ltskdhd11#
不要将可传递依赖项解析设置为false。你会失去使用常春藤的一大好处。
而是在每个依赖项中创建配置Map。
示例
下面的人为示例将依赖关系保存在单独的目录中,以说明哪些jar位于所需的类路径上。如您所见,kafka客户机jar与它们所依赖的jar(可传递依赖项)一起下载。
生成.xml
检索任务用于将文件保存在“target/lib”目录下。ivycachepath任务用于创建具有适当文件的ant缓存。
常春藤.xml
神奇之处在于配置Map“compile->default”或“test->default”。