如何在构建 Gradle 项目时排除 com.google.guava 依赖项的变体之一

问题描述 投票:0回答:3

我已将以下依赖项包含在我的 gradle 项目的 build.gradle 文件中,以便与 VertexAi LLM 库一起使用。

implementation group: 'dev.langchain4j', name: 'langchain4j-vertex-ai', version: '0.22.0'

我在测试主要功能时遇到问题。

Idea IntelliJ 提示说它无法在 com.google.guava:guava:32.1.2-jre 的两个变体之间进行选择(这是 VertexAi 依赖项的依赖项)

我收到以下错误消息

The consumer was configured to find an API of a library compatible with Java 11, preferably in the form of class files, and its dependencies declared externally.

However we cannot choose between the following variants of com.google.guava:guava:32.1.2-jre
      - androidApiElements
      - jreApiElements

我认为我需要使用 jreApiElements 变体,因为我只处理 Web 应用程序。 IDE 看起来很混乱,因为两种变体都提供了相同数量的参数。

All of them match the consumer attributes:
  - Variant 'androidApiElements' capabilities com.google.collections:google-collections:32.1.2-jre and com.google.guava:guava:32.1.2-jre declares an API of a library compatible with Java 8, packaged as a jar, and its dependencies declared externally:
      - Unmatched attributes:
          - Provides attribute 'org.gradle.jvm.environment' with value 'android' but the consumer didn't ask for it
          - Provides release status but the consumer didn't ask for it
  - Variant 'jreApiElements' capabilities com.google.collections:google-collections:32.1.2-jre and com.google.guava:guava:32.1.2-jre declares an API of a library compatible with Java 8, packaged as a jar, and its dependencies declared externally:
      - Unmatched attributes:
          - Provides attribute 'org.gradle.jvm.environment' with value 'standard-jvm' but the consumer didn't ask for it
          - Provides release status but the consumer didn't ask for it

请让我知道如何选择 jreApiElements 变体,同时排除 androidApiElements 变体。最好在 build.gradle/project gradle 设置中执行此操作,因为我希望代码是可移植的。

我尝试过以下解决方案:

  1. 在 gradle 包装属性中设置正确的 gradle 版本 文件

  2. 添加参数applicationDefaultJvmArgs = ["-org.gradle.jvm.environment=standard-jvm"] 到 build.gradle 文件 (这导致构建失败,所以我将其删除)

  3. 在build.gradle中添加以下2个依赖项

    实施组:'com.google.cloud',名称:'google-cloud-aiplatform',版本:'3.24.0'

    实现组:'com.google.guava',名称:'guava',版本:'32.1.2-jre'

以上解决方案均无效。请让我知道如何排除番石榴依赖的 android 变体

java gradle guava intellij-14 google-cloud-vertex-ai
3个回答
2
投票

我们从一些 Gradle 专家那里得到的建议列在我们的发行说明中。 (我真的应该在我们的主页上提到它,抱歉。)

sourceSets.all {
  configurations.getByName(runtimeClasspathConfigurationName) {
    attributes.attribute(Attribute.of("org.gradle.jvm.environment", String), "standard-jvm")
  }
  configurations.getByName(compileClasspathConfigurationName) {
    attributes.attribute(Attribute.of("org.gradle.jvm.environment", String), "standard-jvm")
  }
}

我们还被告知,从 Gradle 6 升级到 Gradle 7 可能会消除这种需要。

也就是说,我们听说过一些不同但相关的问题。因此,如果这对您的情况没有帮助,有人可能可以提供另一种可能的解决方案。


0
投票

我遇到了https://github.com/google/guava/issues/6612#issuecomment-1618157335对我有用:

buildscript {
    configurations.classpath {
        attributes.attribute(Attribute.of("org.gradle.jvm.environment", String), "standard-jvm")
    }
}

我正在将旧的 Gradle 项目从 v4 升级到 v8,在 v6 时遇到了这个问题。


0
投票

在升级番石榴时,以下内容似乎对我有用,

implementation ('com.google.guava:guava:33.1.0-jre'){
    attributes{
        attribute(Attribute.of("org.gradle.jvm.environment", String),"standard-jvm") 
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.