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

Gradle复合构建,传递依赖关系未解决

臧令
2023-03-14

首先,很抱歉我不得不用伪代码来展示这个问题,因为原始库代码是封闭源代码,整个构建过程稍微复杂一点。

问题如下:

我们有一个项目a,它使用了一个内部库B。这个库使用了几个opensource库,我们现在称之为C和D。

出于调试的目的,我希望创建项目a的一个分级复合构建,其中包括使用includeBuild的库B。

项目A:安置。梯度

rootProject.name = 'A'

includeBuild '../B'

项目A在其构建中包括库B。Gradle:

repositories {
    mavenCentral()
}

dependencies {
       compile group: 'bgroup', name: 'b', version: '1.0' 
}

库B有C和D作为依赖项。D有自己的存储库,C在MavenCentral上。

repositories {

  maven {
    url "http://D-Repository/maven"
  }

  mavenCentral()
}

dependencies {
       compile group: 'dgroup', name: 'd', version: '1.0'
       compile group: 'cgroup', name: 'c', version: '1.6'
}
repositories {
     maven {
       url "http://D-Repository/maven"
     }

     mavenCentral()
 }

 dependencies {
       compile group: 'bgroup', name: 'b', version: '1.0' 
 }

所以我必须添加D的存储库,尽管A没有直接将它用作依赖项。

  • 这是意料之中的行为吗?
  • 是否缺少某个配置?

如果我只是从我们自己的存储库中获得库B(没有复合构建),我就不必将D的存储库添加到项目A中。但是这样我就不能在处理项目A时调试B。

共有1个答案

司徒池暝
2023-03-14

正如在注释中发现的,发布的B是一个包含依赖类的胖罐子。如果使用复合构建,则按其含义使用正常的传递依赖项解析。使用胖罐子作为依赖项是非常糟糕的做法。

如果您现在依赖于fat JAR的复合构建替换,那么您有适当的依赖声明,但是A找不到D,因为在它所知道的任何存储库中都找不到它。您要么必须将对B的依赖项替换为包含的构建中的fat JAR,要么切换到使用正确的传递依赖项处理方式。这将包括发布普通的B JAR,但使用正确的元数据声明其依赖项,并将特定于D的存储库添加到A,以便它能够解析传递依赖项。

 类似资料:
  • 我有一个Gradle构建脚本,包含以下依赖项(其他不多):

  • 我的结构如下: 项目A- 项目B- 编译项目B一切正常: 项目B/build.gradle: ProjectB/settings.gradle: 然而,在编译ProjectA时,它表示找不到ProjectC ProjectA/build.gradle: ProjectA/settings.gradle: 这将显示以下错误: 其中:构建文件ProjectB\build.gradle 出了什么问题:

  • 在我的模块构建脚本(build.gradle)中,我可以设置依赖项: Gradle示例8.2 我还可以在构建脚本中使用方法并设置依赖项: 如果构建脚本需要使用外部库,可以将它们添加到构建脚本本身的脚本类路径中。您可以使用buildscript()方法来实现这一点,并传入一个声明构建脚本类路径的闭包。 Gradle示例59.6 我的问题,这些是一样的吗?这两种为构建脚本设置依赖关系的方式有什么区别吗

  • 问题内容: 我在ivaven.xml中添加了一个依赖项(让我们将其命名为A),它在maven Central中具有一个pom文件。Ivy使用ibiblio解决了Maven依赖关系。添加到ivy.xml的依赖项(A)具有传递的依赖项(B)。到目前为止,到目前为止很好。常春藤无法解决传递性依赖项(B)的依赖项(C)。 我在ivy.xml中定义了A,如下所示: 在B的pom文件中,在编译和测试范围中都定

  • 我有一个奇怪的问题,< code > mvn clean install-d project . version = 1 或< code>jenkins build运行正常,但当我在IDE中打开模块时,intellij变得非常愤怒,这影响了开发。 我在intellij日志中看到以下问题 POM 代码受版权保护,所以不能透露,但这是一个基本大纲 < li>fabric-common:基本模块(用于绑

  • 我有一个多模块Maven项目,其中包含子模块ModuleA和ModuleB等。ModuleA将ModuleB列为依赖项。但是,当仅构建模块A时,Maven不会解决模块B的依赖关系-导致。我想避免构建整个父级以使构建更快。目前我发现让它工作的唯一方法是使用exec插件和脚本,将父项目称为“ModuleB, ModuleA”,这意味着我必须在每次依赖项更改时更改脚本(例如添加ModuleC)。 是否有