有没有任何gradle插件可以检查传递依赖的版本?

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

我们有一个模块化项目,依赖关系如下所示

核心

level_1-app 取决于 核心

level_2-app 取决于 level_1-app

level_3_1-app 取决于 level_2-app level_3_2-app 取决于 level_2-app level_3_3-app 取决于 level_2-app level_3_4-app 取决于 level_2-app

facade-app 取决于 level_3_1-applevel_3_2-applevel_3_3-applevel_3_4-app enter image description here 我们仍然没有任何模块的 semver 版本控制,因此目前我们决定所有项目的传递版本应该始终相同(我的意思只是我们的项目。对于其他库,我们不希望有这种限制)。

facade-app 上,我们要检查所有传递依赖项是否具有相同版本的 corelevel_1-applevel_2-app。如果不是 - 构建应该失败或至少发出警告。

是否有任何 gradle 插件可以做到这一点,或者我们应该实现自己的插件?

gradle dependencies gradle-plugin semantic-versioning transitive-dependency
1个回答
0
投票

这并不完美,但这大致就是我的方法

// In facade-app's build.gradle

def enforcedModules = ['core', 'level_1-app', 'level_2-app']
def moduleVersions = [:]

configurations.all { config ->
    // Check only resolvable configurations
    if (config.canBeResolved) {
        config.incoming.afterResolve { resolvableDependencies ->
            resolvableDependencies.resolutionResult.allDependencies { dep ->
                def selectedId = dep.selected.id
                // Ensure we have a module dependency
                if (selectedId instanceof ModuleComponentIdentifier) {
                    def moduleName = selectedId.module
                    if (enforcedModules.contains(moduleName)) {
                        def version = selectedId.version
                        if (!moduleVersions.containsKey(moduleName)) {
                            // Store the version if encountering the module for the first time
                            moduleVersions[moduleName] = version
                        } else if (moduleVersions[moduleName] != version) {
                            // Fail the build if a version mismatch is detected
                            throw new GradleException("Version mismatch detected for '${moduleName}'. Versions used: '${moduleVersions[moduleName]}' and '${version}'")
                        }
                    }
                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.