使用测试分类器的Gradle依赖

4
我一直在尝试引用一个文物,但没有成功。
使用Maven做这件事没有问题:
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.13</artifactId>
    <version>3.0.0</version>
    <classifier>test</classifier>
</dependency>

Maven会选择正确的构件。然而,使用Gradle时,无论我尝试什么,它似乎总是包含没有分类器的构件:
implementation 'org.apache.kafka:kafka_2.13:3.0.0:test'

我已经阅读了Gradle文档,并且它建议使用这种语法,也许与这个特定的构件有关系吗?
更新:
我的目标是使用spring-kafka-test。我们的内部构件库没有设置为使用pom解析,这就是为什么我需要手动添加传递性的原因。
我已经排除了可能是我们内部构件库的问题,因为我只使用了Maven中央库,但结果还是一样的。

1
尝试使用org.apache.kafka:kafka_2.13:3.0.0:test@jar,因为Gradle文档似乎表明需要扩展名。否则,如果目标是测试Kafka代理交互,则通常使用Testcontainers或EmbeddedKafka / spring-kafka-test。 - OneCricketeer
@OneCricketeer也不起作用;我的目标确实是使用spring-kafka-test;但由于我没有pom解析,所以需要手动添加这个传递依赖;在maven中这样做是可以的,我的问题纯粹是从gradle的角度来看,我该如何配置它来解决这个特定的构件。现在我唯一能想到的就是重命名和重新托管这个特定的文件。 - epoch
Gradle CLI 是否返回了特定的错误消息?还是只是忽略了分类器?Gradle 版本是多少? - OneCricketeer
2个回答

1

我成功地只使用了所提到的jar文件,方法如下:

dependencies {
  implementation ('org.apache.kafka:kafka_2.13:3.0.0:test') {
    exclude group: 'org.apache.kafka' // or finer grained, if we like
  }
  ...
}

另请参阅:如何在Gradle依赖项的依赖项中指定分类器?


1
我根据这个答案找到了解决方法;Gradle实际上包含了该构件,但其输出结果是误导性的。它并没有明确说明它实际上包含了“test” jar,它只反映(即使使用dependencyInsight)“org.apache.kafka:kafka_2.13:3.0.0”存在。然而,我在Intellij的外部库部分找到了这个jar。但还是感谢这个答案,它帮助我深入挖掘了一下。 - epoch
问题(我认为)是,所有“分类器”都只有一个pom文件,这个(和“正常”的)构件会拉取所有(不需要的)传递依赖项。 - xerx593

0

但是

你关于Maven的假设也是错误的:

Maven Pulls All Dependencies Screenshot

Maven万能!(在module-test-parents中没有定义依赖项。)

为了在Maven中实现相同的功能(甚至更多),我们还需要:

  <dependencies>
    <dependency>
      <groupId>org.apache.kafka</groupId>
      <artifactId>kafka_2.13</artifactId>
      <version>3.0.0</version>
      <classifier>test</classifier>
      <exclusions>
        <exclusion> <!--sledge hammer -->
          <groupId>*</groupId>
          <artifactId>*</artifactId>
        </exclusion>
        <!-- or selectively ... -->
      </exclusions>
    </dependency>
  </dependencies>

在Gradle中,相应的代码如下(已测试):
implementation ('org.apache.kafka:kafka_2.13:3.0.0:test'){
  exclude group: '*'
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接