Skip to content

Commit

Permalink
Map versions of dependencies with artifacts (#28267)
Browse files Browse the repository at this point in the history
  • Loading branch information
bot-gradle committed Feb 27, 2024
2 parents 9683320 + 665d5c1 commit cf4549b
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 6 deletions.
Expand Up @@ -546,6 +546,61 @@ class MavenPublishResolvedVersionsJavaIntegTest extends MavenPublishResolvedVers
}
}
@Issue("https://github.com/gradle/gradle/issues/28225")
def "maps version of dependency with artifact"() {
given:
mavenRepo.module("org", "foo", "2.1").artifact(classifier: "cls").publish()
settingsFile << "rootProject.name = 'producer'"
buildFile << """
plugins {
id("java-library")
id("maven-publish")
}

${mavenTestRepository()}

group = "org.example"
version = "1.0"

dependencies {
implementation "org:foo:2.+:cls"
}

publishing {
publications {
mavenJava(MavenPublication) {
from components.java
versionMapping {
usage('java-api') {
fromResolutionOf('runtimeClasspath')
}
usage('java-runtime') {
fromResolutionResult()
}
}
}
}
${mavenTestRepository()}
}
"""
when:
succeeds("publish")
then:
def pom = mavenRepo.module("org.example", "producer", "1.0").parsedPom
def dependencies = pom.scopes.runtime.dependencies.values()
dependencies.size() == 1
def dependency = dependencies[0]
dependency.groupId == "org"
dependency.artifactId == "foo"
dependency.version == "2.1"
dependency.classifier == "cls"
}
}
class MavenPublishJavaLibraryRuntimeLastResolvedVersionsJavaIntegTest extends MavenPublishResolvedVersionsJavaFixture {
Expand Down
Expand Up @@ -320,15 +320,15 @@ private void convertDependency(ModuleDependency dependency, Consumer<MavenDepend
Set<ExcludeRule> allExcludeRules = getExcludeRules(globalExcludes, dependency);

if (dependency.getArtifacts().isEmpty()) {
ResolvedCoordinates coordinates = resolveDependency(dependency);
ResolvedCoordinates coordinates = resolveDependency(dependency, true);
collector.accept(newDependency(coordinates, null, null, scope, allExcludeRules, optional));
return;
}

// If the dependency has artifacts, do not map the coordinates.
// If the dependency has artifacts, only map the coordinates to component-level precision.
// This is so we match the Gradle behavior where an explicit artifact on a dependency
// that would otherwise map to different coordinates resolves to the declared coordinates.
ResolvedCoordinates coordinates = convertDeclaredCoordinates(dependency.getGroup(), dependency.getName(), dependency.getVersion());
ResolvedCoordinates coordinates = resolveDependency(dependency, false);
for (DependencyArtifact artifact : dependency.getArtifacts()) {
ResolvedCoordinates artifactCoordinates = coordinates;
if (!artifact.getName().equals(dependency.getName())) {
Expand Down Expand Up @@ -375,15 +375,22 @@ private void convertDependencyConstraint(DependencyConstraint dependency, Consum
}

private void convertImportDependencyConstraint(ModuleDependency dependency, Consumer<MavenDependency> collector) {
ResolvedCoordinates identifier = resolveDependency(dependency);
ResolvedCoordinates identifier = resolveDependency(dependency, true);
collector.accept(newDependency(identifier, "pom", null, "import", Collections.emptySet(), false));
}

private ResolvedCoordinates resolveDependency(ModuleDependency dependency) {
private ResolvedCoordinates resolveDependency(ModuleDependency dependency, boolean variantPrecision) {
if (dependency instanceof ProjectDependency) {
return variantDependencyResolver.resolveVariantCoordinates((ProjectDependency) dependency, warnings);
} else if (dependency instanceof ExternalDependency) {
ResolvedCoordinates identifier = variantDependencyResolver.resolveVariantCoordinates((ExternalDependency) dependency, warnings);

ResolvedCoordinates identifier;
if (variantPrecision) {
identifier = variantDependencyResolver.resolveVariantCoordinates((ExternalDependency) dependency, warnings);
} else {
identifier = componentDependencyResolver.resolveComponentCoordinates((ExternalDependency) dependency);
}

if (identifier != null) {
return identifier;
}
Expand Down

0 comments on commit cf4549b

Please sign in to comment.