Ich versuche, alle -SNAPSHOT
Abhängigkeiten mit einem lokalen Unterprojekt zu ersetzen. es funktioniert gut, aber ich habe ein Problem: Ich kann die Projektkonfiguration definieren, die ich verwenden möchte (es dauert default
, die runtime
erstreckt, und ich will, dass nicht):Gradle Abhängigkeit Substitution mit Projektkonfiguration
configurations.all {
resolutionStrategy.dependencySubstitution {
all { dependency ->
if (!dependency.requested.version.endsWith('SNAPSHOT'))
return
def isRootProject = rootProject.name.equals(dependency.requested.module)
def matching = rootProject.subprojects.find {
it.name.equals(dependency.requested.module)
}
if (isRootProject)
dependency.useTarget rootProject
else if (matching)
// The specified syntax with path: and configuration: does not work. How can I do ?
dependency.useTarget project(path: ":" + dependency.requested.module, configuration: 'compile')
else
println 'Keep SNAPSHOT: ' + dependency.requested.module;
}
}
}
Ich weiß, warum es nicht funktioniert, ist die Dokumentation ziemlich klar: https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/DependencySubstitutions.html#project%28java.lang.String%29 es unterstützt keinen Konfigurationsnamen.
Gibt es eine bekannte Problemumgehung für diese Einschränkung?
def myDeps = ['my-dependency', 'my-dependency-2']
for (String projectName : myDeps) {
if (new File(rootDir, '../' + projectName).exists()) {
def path = '../' + projectName
def mod = 'my.company:' + projectName
System.out.println("Adding composite build for project: " + projectName + " using path: " + path + " replacing module: " + mod);
includeBuild(path) {
dependencySubstitution {
substitute module(mod) with project(':')
}
}
} else {
System.out.println("Skipping composite build for project: " + projectName);
}
}
Wenn Sie Lust haben, können Sie tun, was wir tun, und nicht eine statische Liste von Abhängigkeiten verwenden: