当前位置: 首页 > 知识库问答 >
问题:

如何在Gradle中用分类器(平台版本)排除依赖?

轩辕涵亮
2023-03-14

在我的项目中,我对'org.nd4j:nd4j-native-platform:0.6.0'有依赖关系,它给我带来了传递依赖关系:

  • gradle:org.nd4j:nd4j-native:linux-ppc64le:0.6.0
  • gradle:org.nd4j:nd4j-native:macosx-x86_64:0.6.0
  • gradle:org.nd4j:nd4j-native:windows-x86_64:0.6.0
  • gradle:org.nd4j:nd4j-native:linux-x86_64:0.6.0
configurations {
    all.collect { configuration ->
        configuration.exclude(group: 'org.nd4j', module: 'nd4j-native', classifier: 'linux-ppc64le')
    }
}

看来gradle不支持用分类器排除。

如何排除这种传递依赖关系?

更新:Gradle允许我们排除依赖项,但是如果我们有几个具有相同id和组但不同分类器的依赖项呢?

共有1个答案

东方富
2023-03-14

我也曾面临同样的问题。我使用了一个具有梯度依赖关系的deeplearning4j库。

compile group: 'org.nd4j', name: 'nd4j-native-platform', version: '1.0.0-beta'
compile group: 'org.deeplearning4j', name: 'deeplearning4j-core', version: '1.0.0-beta'

当我使用它时,它也在下载其他平台的分类器,它的大小几乎是500MB。但是我的用例是特定于Windows平台的,所以我不需要Linux和Android以及其他平台的其他分类器,如果我排除了这个组,也就排除了Windows平台的分类器。在Gradle中,就我所知,我们不能排除特定的量词。

因此,问题是如何删除特定的分类器。我发现奇怪的是,当我创建项目的jar文件并提取jar时,它向我显示org.nd4j:nd4j-native:linux-ppc64le:0.6.0和其他jar,但当我生成依赖关系树时,它没有向我显示树中特定的jar。

<dependency>
        <groupId>org.nd4j</groupId>
        <artifactId>nd4j-native-platform</artifactId>
        <version>1.0.0-beta</version>
    </dependency>
<dependency>
    <groupId>org.deeplearning4j</groupId>
    <artifactId>deeplearning4j-core</artifactId>
    <version>1.0.0-beta</version>
</dependency>
compile (group: 'org.deeplearning4j', name: 'deeplearning4j-core', version: '1.0.0-beta') 
{
exclude group: 'org.bytedeco.javacpp-presets', module: 'opencv-platform'
exclude group: 'org.bytedeco.javacpp-presets', module: 'leptonica-platform'
exclude group: 'org.bytedeco.javacpp-presets', module: 'hdf5-platform'

}
compile (group: 'org.nd4j', name: 'nd4j-native-platform', version: '1.0.0-beta')
{
    exclude group: 'org.bytedeco.javacpp-presets', module: 'openblas-platform'
}

compile group: 'org.nd4j', name: 'nd4j-native', version: '1.0.0-beta', classifier: "windows-x86_64"
compile group: 'org.bytedeco.javacpp-presets', name: 'openblas', version: '0.2.20-1.4.1'
compile group: 'org.bytedeco.javacpp-presets', name: 'openblas', version: '0.2.20-1.4.1', classifier: "windows-x86"
compile group: 'org.bytedeco.javacpp-presets', name: 'openblas', version: '0.2.20-1.4.1', classifier: "windows-x86_64"
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.4.1-1.4.1'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.4.1-1.4.1',classifier: "windows-x86"
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.4.1-1.4.1',classifier: "windows-x86_64"
compile group: 'org.bytedeco.javacpp-presets', name: 'leptonica', version: '1.75.3-1.4.1'
compile group: 'org.bytedeco.javacpp-presets', name: 'leptonica', version: '1.75.3-1.4.1',classifier: "windows-x86"
compile group: 'org.bytedeco.javacpp-presets', name: 'leptonica', version: '1.75.3-1.4.1',classifier: "windows-x86_64"

这样做将我的jar大小减少到近250MB

 类似资料:
  • 我得到以下错误在我的Spring启动gradle多模块项目。 根本原因是< code > spring-boot-starter-data-JPA 过渡依赖于3.24.0-GA,而< code > spring-boot-starter-thyme leaf 过渡依赖于3.20.0-GA。我使用的是Gradle Java平台Pulgin,而不是Spring Boot Gradle插件。 问题: 如

  • 问题内容: 假设我想在项目中添加guice-assistedinject作为依赖项。它将guice工件指定为依赖项本身。如何告诉它使用guice的no_aop版本? 我知道我可以执行以下操作,但是我可以一步完成而不排除guice模块吗? 问题答案: 没有更简单的解决方案。您可以使用简短的依赖性表示法(例如)来缩短代码。

  • 问题内容: 我希望有可能在myModuleA中使用Guava-19,在myModuleB中使用guava-20, 因为拼图模块具有自己的类路径。 假设myModuleA使用Iterators.emptyIterator(); -已在guava-20中删除,而myModuleB使用新的静态方法FluentIterable.of(); -番石榴19中没有。不幸的是,我的测试是否定的。在编译时,看起来不

  • 问题内容: 我正在与Maven项目一起工作,并且有两个项目,并且。我是一个maven库,其pom如下所示: 在我上面的POM,带来的是各种Spring框架依赖喜欢的旧版本,。它带来了版本,我想使用这两个spring框架的最新版本,即。排除旧版本和来自最新版本并使用最新版本的正确方法是什么? 我需要使用最新版本,因为某些类仅在最新版本中存在。 问题答案: 依赖项要求的库版本与要使用的库版本之间可能存

  • 渐变-泊坞插件和Spring靴版本 2.0.0.M4 M4 使用较新的客户端,并且使用 docker 插件以异常结尾,存在一个问题: 我的主项目中的构建脚本: 如您所见,我们加载spring-boot-gradle-plugin version=2.0.0。M4及其所有依赖项。 我的子项目构建:gradle: 最重要的是,docker.gradle文件与子项目的build.gradle文件位于同一