当前位置: 首页 > 面试题库 >

Java使用Gradle时如何排除传递依赖的所有实例?

田镜
2023-03-14
问题内容

我的gradle项目使用该application插件构建了一个jar文件。作为运行时传递依赖项的一部分,我最后引入org.slf4j:slf4j-log4j12。(在至少5或6个其他可传递依赖项中被称为子传递依赖项-该项目正在使用spring和hadoop,因此除了厨房水槽之外的所有东西都被拉进来了…等一下…那里也是:) )。

我想slf4j-log4j12从我的内置jar中全局排除该jar。所以我尝试了这个:

configurations {
  runtime.exclude group: "org.slf4j", name: "slf4j-log4j12"
}

但是,这似乎排除了所有 org.slf4j工件,包括slf4j-api。在调试模式下运行时,我看到诸如以下的行:

org.slf4j#slf4j-api is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-simple is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-log4j12 is excluded from org.apache.hadoop:hadoop-common:2.2.0(runtime).

我不想查找每个slf4j-log4j12传递依赖项的来源,然后compile foo { exclude slf4j... }在我的代码dependencies块中包含单独的语句。

更新:

我也尝试过这样:

configurations {
  runtime.exclude name: "slf4j-log4j12"
}

最终排除了构建中的所有内容!好像我指定了group: "*"

更新2:

我为此使用Gradle版本1.10。


问题答案:
configurations {
  runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
}

排除规则似乎只有两个属性- groupmodule。但是,以上语法不会阻止你将任意属性指定为谓词。尝试从单个依赖项中排除时,你不能指定任意属性。例如,这失败了:

dependencies {
  compile ('org.springframework.data:spring-data-hadoop-core:2.0.0.M4-hadoop22') {
    exclude group: "org.slf4j", name: "slf4j-log4j12"
  }
}

No such property: name for class: org.gradle.api.internal.artifacts.DefaultExcludeRule

因此,即使你可以指定一个依赖group:,并name:不能与指定排除name:!?!

也许一个单独的问题,但什么究竟是一个模块呢?我可以理解groupId:artifactId:version的Maven概念,在Gradle中可以理解为group:name:version。但是,然后,我如何知道特定的Maven工件属于哪个模块(以讲授方式)?



 类似资料:
  • 我遇到了一个我一直无法解决的特殊问题,如果有任何帮助,我将不胜感激。最初,我在Java项目中包含了一些jar依赖项作为工件依赖项。它看起来如下所示: 到目前为止还好。让我们把这个项目叫做'A'。我已经将项目A包含在另一个Java项目B中,同样是用Gradle。我注意到,当在B中使用一个带有maven-publish的published时,它在pom文件中并没有排除所有的传递依赖项。 所以我开始使用

  • 我试图用JUnit和SLF4J测试来测试记录器的行为,这是“SLF4J的一个测试实现,它将日志消息存储在内存中,并提供检索它们的方法”。 我有一些将SLF4J作为传递依赖项的依赖项。我试图将SLF4J从我的测试配置中的所有依赖项中排除,但我仍然需要它来进行SLF4J测试。 我可以通过下面的代码将SLF4J排除在所有内容之外,但这显然也将它排除在我需要的SLF4J测试之外。 由于SLF4J是我的许多

  • 给予 这在gradle 1.3中无法正常工作。(即,子项目包含所有依赖项) 这是一个bug还是有不同的语法来排除项目依赖关系?

  • 我有三个分级模块:ModA模块、ModB模块和ModC模块 ModA依赖于ModB和Spring Web MVC 3.2.6 ModC依赖于Spring Web MVC 4.1.5 我得到了相当多的错误,因为ModA拉进来,使用的是Spring4.1.5而不是3.2.6。由于版本差异和时间,我现在无法将ModA更新到Spring4.1.5。我想做的是将Spring4.1.5从ModA Gradle

  • 我试图从gradle构建中排除嵌套的传递依赖项。依赖结构看起来像 org.apache.beam:beam-sdks-java-core:2.33.0-自定义 我按照gradle exclude的公认解决方案排除了依赖性,但它对我不起作用。 这不排除依赖项。当我将其更改为时,依赖项仍然没有被排除。 关于如何排除这种依赖关系的任何建议?它在旧版本中拉动。

  • 我试图排除gradle中的传递依赖项 我看到这个错误 null 在类型为org.gradle.api.internal.artifacts.dependencies.DefaultExternalModuleDependency的DefaultExternalModuleDependency{group='org.apache.kafka',name='kafka-streams',version