我正在使用gradle进行一个包含多个子项目的项目。在root build.gradle中,我们声明了一些依赖项。其中大部分是标准依赖项,但其中一些是特定于我们的项目的,只能从我们的GitLab环境访问。这大致是我们的build.gradle的样子:
subprojects {
apply plugin: 'java'
compileJava.options.encoding = 'UTF-8'
dependencies {
compileOnly "GroupName:ModuleA:${rootProject.ext.moduleAVersion}"
compileOnly "GroupName:ModuleB:${rootProject.ext.moduleBVersion}"
testCompile "GroupName:ModuleA:${rootProject.ext.moduleAVersion}"
...other non-problematic deps...
}
tasks.withType(Ear) {
dependencies {
earlib "GroupName:ModuleA:${rootProject.ext.moduleAVersion}"
...other non-problematic deps...
}
ear {
baseName "some valid name"
}
}
}
在开发过程中,我们注解掉了相关deps的“compileOnly”和“testCompile”,并将它们替换为如下逻辑:
def sdkJars = fileTree(dir: "${rootProject.rootDir}\\BuildFiles")
compileOnly sdkJars
testCompile sdkJars
sdkJars是一个有效的目录,其中包含满足这些依赖关系所需的所有jar文件。这可能非常笨拙,必须不断插入此逻辑并确保在推送更改时不会提交,我们需要一个新的范例,允许开发人员简单地将“env”设置为“dev”进行构建而不必担心修改他们的gradle文件。
在开发环境中,是否可以使用依赖项替换或类似的方法来手动加载jar文件中的依赖项。在测试中,我探索了这样的选项,但无法找出如何将依赖项替换为文件中的jar:
configurations.all {
resolutionStrategy.dependencySubstitution.all { DependencySubstitution dependency ->
// In dev env, replace deps we know will fail
if (project.env == "dev") {
if (dependency.requested instanceof ModuleComponentSelector && dependency.requested.group == "GroupName") {
// what can go here?
}
}
}
}
1条答案
按热度按时间dauxcl2d1#
学习很有趣!
自从发布这个问题后,我了解了这个问题的简单而直接的解决方案:平面目录存储库。
https://docs.gradle.org/current/userguide/declaring_repositories.html#sec:declaring_multiple_repositories
在我的仓库中,我添加了:
这允许开发人员在项目级或用户级gradle.properties文件(https://docs.gradle.org/current/userguide/directory_layout.html#dir:gradle_user_home)中指定目录。
然后Gradle会将指定的目录视为存储库。它会将任何模块名称与目录中的文件进行匹配。
示例:
原始依赖声明:
评估为:
这可以通过名为以下的jar文件来满足: