【问题标题】:Building with multiple versions of the same dependency使用相同依赖项的多个版本进行构建
【发布时间】:2017-09-18 08:43:31
【问题描述】:

android 应用程序的两个组件依赖于同一个库的两个不同版本。 (谷歌 protobuf)。

即。 Module 1 依赖于 protobuf2,而 Module 2 需要 protobuf3。

两个版本的必需部分互斥,因此不可互换。

到目前为止,gradle 内部使用两个版本中的最新版本,并且一个模块在缺少的方法处中断。

是否可以强制 gradle 将版本 2 用于 2 的依赖项和版本 3 用于 3 的依赖项?或者有什么可能的替代方案来解决这类问题?

干杯。

【问题讨论】:

  • Module1 和 Module2 有不同的 pom 文件吗?
  • 我们有不同的 build.gradle 文件。 Android Main 应用的 build.gradle 和导入的 android 子模块的 build.gradle 文件。

标签: java gradle dependencies building


【解决方案1】:

我想,如果您的各个模块有不同的 build.gradle 文件,并且这些模块由某个父 build.gradle 文件链接,那么应该没有任何问题。

我不是 gradle 方面的专家,但我长期使用 maven,这些在本质上有些相似。

在maven中,我可以在不同模块的pom文件中声明不同版本的相同依赖:

<dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.2.2</version>
</dependency> 

在另一个 pom 文件中,您可以声明不同的版本:

<dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>2.13.2</version>
</dependency>

现在,您可以看到两个不同版本的 jar 将添加到不同模块的“Maven-dependencies”下。

在同一个 pom 文件中,不使用 profiling 是不可能的。否则,它总是会从 2-3 个不同版本的 jar 中选择 离它的依赖树最近的 jar。

【讨论】:

  • 这是有道理的。在我们的例子中,最新版本的依赖被添加为主要 build.gradle 的依赖,所以我想我们可以尝试使用单独的 build.gradle 文件将特定代码编译到另一个子模块并查看。感谢您的回答将更新结果。
猜你喜欢
  • 2016-05-24
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多