【问题标题】:Gradle dependency with test classifierGradle 依赖与测试分类器
【发布时间】:2022-01-04 23:45:40
【问题描述】:

我一直在尝试引用artefact,但没有运气。

使用 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 Central 排除了它可能是我们的内部存储库的事实;我得到了相同的结果。

【问题讨论】:

  • 试试org.apache.kafka:kafka_2.13:3.0.0:test@jar,因为 Gradle 文档似乎说需要扩展。否则,如果目标是测试 Kafka 代理交互,则经常使用 Testcontainers 或 EmbeddedKafka / spring-kafka-test
  • @OneCricketeer,也不起作用;我的目标确实是使用 spring-kafka-test;但由于我没有 pom 分辨率,我需要手动添加这个传递;在 Maven 作品中这样做,我的问题纯粹是从 gradle 的角度来看,关于我如何配置它来解决这个特定的人工制品。我现在唯一能想到的就是重命名并重新托管这个特定的文件。
  • 是否有来自 gradle cli 的特定错误消息被返回?或者它只是忽略了分类器?什么 gradle 版本?

标签: maven gradle dependencies spring-kafka


【解决方案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
  }
  ...
}

另请参阅:How to specify a classifier in a gradle dependency's dependency?

【讨论】:

  • 我是根据这个答案想出来的; Gradle 实际上包含了工件,但它的输出具有误导性。它没有说它实际上包括test jar,它只是反映(即使使用dependencyInsight)org.apache.kafka:kafka_2.13:3.0.0 存在。但是我在 Intellij 的外部库部分找到了这个 jar。但是感谢您的回答,它帮助我更深入地研究了
  • 问题(我认为)是,该(&“正常”)工件中的所有“分类器”只有一个 pom,它会拉动所有(不需要的)传递依赖项。跨度>
【解决方案2】:

但是

您对 maven 的假设也是错误的:

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: '*'
}

【讨论】:

    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    相关资源
    最近更新 更多