我有一个非常大的多项目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,并且构建按预期失败
有人解决了这个问题吗?
备注:
请不要提出复合版本(目前无法实现,但我正在努力) 更改构建系统(我们有一个非常大的项目):)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到这种问题,通常是因为Gradle在升级后对依赖解析的处理方式有所变化,导致它不能正确识别项目间的内部依赖。以下是一些可能的解决方案和排查步骤:
确保子项目发布到本地仓库:如果你的项目依赖于其他模块,并且期望Gradle像处理外部依赖那样解析它们,你需要确保这些子项目已经正确地安装或发布了到你的本地Maven或Ivy仓库。这可以通过在子项目中执行./gradlew publishToMavenLocal
(对于Maven)或相应的任务来完成。但根据你的描述,你希望保持内部项目依赖。
检查:WFPlugins-Server
项目的group
和version
配置:确保:WFPlugins-Server
项目的build.gradle
文件中正确设置了group
和version
属性,因为这些信息用于构建依赖路径。例如:
group = 'com.company'
version = '1.12'
确保这些值与你在:SpringWFS
项目中引用时使用的相匹配。
使用Project Dependency而非External Module Dependency:尽管你提到不想改变构建系统,但确保依赖声明正确是关键。你应该继续使用project()
语法来明确表示这是项目间依赖,而不是尝试让Gradle将其解析为外部依赖。确认你的依赖块正确无误,如下所示:
dependencies {
implementation project(path: ':Monitor', configuration: 'default')
implementation project(':WFPlugins-Server')
// ... 其他项目依赖
}
注意,如果:WFPlugins-Server
有特定的配置需要被消费,应该在project()
调用中指定。
清理并重建:有时候,旧的构建缓存或状态可能会干扰新的构建。尝试执行./gradlew clean build --refresh-dependencies
来强制Gradle刷新其依赖缓存并重新解析所有依赖。
检查多项目构建配置:确保你的settings.gradle
文件包含了所有必要的项目,即每个子项目都被正确包含。例如:
include ':Monitor', ':WFPlugins-Server', ':web-spring', ':Security', ':Client', ':SpringWFS'
查看日志详细信息:增加Gradle的日志级别至--info
或--debug
,以便获取更多关于依赖解析失败的详细信息。这有助于定位问题所在。
如果以上步骤都不能解决问题,建议查阅Gradle官方文档关于多项目构建和依赖管理的部分,或者考虑在Gradle论坛或Stack Overflow上寻求更具体的帮助,提供详细的错误日志和项目结构信息。