开发者社区 问答 正文

为什么Gradle 5(5.6.3)在组件解析期间做出了意外决定?

我有一个非常大的多项目Java构建。更新到Gradle 5(4.10.3-> 5.6.3)之后,最可怕的事情之一是在依赖关系解析期间发生了意外故障:

...
dependencies {
// I know about the deprecation of 'compile', with 'implementation' I have the same problems
    compile project(":Monitor")
    compile project(":WFPlugins-Server")
    compile project(":web-spring")
    compile project(":Security")
    compile project(":Client")
}
...

对我来说,很明显,这应该是项目依赖性。但我收到:

FAILURE: Build failed with an exception.



* What went wrong:

Execution failed for task ':SpringWFS:compileJava'.

> Could not resolve all files for configuration ':SpringWFS:compileClasspath'.
   > Could not find com.company:WFPlugins-Server:1.12.

     Required by:
         project :SpringWFS

因此,gradle尝试将其解析为ExternalModuleDependency(就gradle而言),而不是DefaultProjectDependency,并且构建按预期失败

有人解决了这个问题吗?

备注:

请不要提出复合版本(目前无法实现,但我正在努力) 更改构建系统(我们有一个非常大的项目):)

展开
收起
垚tutu 2019-12-04 16:23:28 908 分享 版权
阿里云 AI 助理回答

遇到这种问题,通常是因为Gradle在升级后对依赖解析的处理方式有所变化,导致它不能正确识别项目间的内部依赖。以下是一些可能的解决方案和排查步骤:

  1. 确保子项目发布到本地仓库:如果你的项目依赖于其他模块,并且期望Gradle像处理外部依赖那样解析它们,你需要确保这些子项目已经正确地安装或发布了到你的本地Maven或Ivy仓库。这可以通过在子项目中执行./gradlew publishToMavenLocal(对于Maven)或相应的任务来完成。但根据你的描述,你希望保持内部项目依赖。

  2. 检查:WFPlugins-Server项目的groupversion配置:确保:WFPlugins-Server项目的build.gradle文件中正确设置了groupversion属性,因为这些信息用于构建依赖路径。例如:

    group = 'com.company'
    version = '1.12'
    

    确保这些值与你在:SpringWFS项目中引用时使用的相匹配。

  3. 使用Project Dependency而非External Module Dependency:尽管你提到不想改变构建系统,但确保依赖声明正确是关键。你应该继续使用project()语法来明确表示这是项目间依赖,而不是尝试让Gradle将其解析为外部依赖。确认你的依赖块正确无误,如下所示:

    dependencies {
       implementation project(path: ':Monitor', configuration: 'default')
       implementation project(':WFPlugins-Server')
       // ... 其他项目依赖
    }
    

    注意,如果:WFPlugins-Server有特定的配置需要被消费,应该在project()调用中指定。

  4. 清理并重建:有时候,旧的构建缓存或状态可能会干扰新的构建。尝试执行./gradlew clean build --refresh-dependencies来强制Gradle刷新其依赖缓存并重新解析所有依赖。

  5. 检查多项目构建配置:确保你的settings.gradle文件包含了所有必要的项目,即每个子项目都被正确包含。例如:

    include ':Monitor', ':WFPlugins-Server', ':web-spring', ':Security', ':Client', ':SpringWFS'
    
  6. 查看日志详细信息:增加Gradle的日志级别至--info--debug,以便获取更多关于依赖解析失败的详细信息。这有助于定位问题所在。

如果以上步骤都不能解决问题,建议查阅Gradle官方文档关于多项目构建和依赖管理的部分,或者考虑在Gradle论坛或Stack Overflow上寻求更具体的帮助,提供详细的错误日志和项目结构信息。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答