Skip to content

Commit 9531bac

Browse files
committed
Domino looses dependency links for artifacts managed at a custom version, fix #399
1 parent ab325b5 commit 9531bac

File tree

6 files changed

+161
-8
lines changed

6 files changed

+161
-8
lines changed

domino/api/src/main/java/io/quarkus/domino/ProjectDependencyResolver.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import io.quarkus.domino.scm.ScmRevisionResolver;
2121
import io.quarkus.maven.dependency.ArtifactCoords;
2222
import io.quarkus.maven.dependency.ArtifactKey;
23+
import io.quarkus.maven.dependency.GACT;
2324
import java.io.IOException;
2425
import java.io.PrintStream;
2526
import java.nio.file.Files;
@@ -286,6 +287,7 @@ public static Builder builder() {
286287

287288
private Function<ArtifactCoords, List<Dependency>> artifactConstraintsProvider;
288289
private Set<ArtifactCoords> allConstraints;
290+
private Map<GACT, ArtifactCoords> allConstraintsByGa;
289291
private Set<ArtifactCoords> projectBomConstraints;
290292
private final Map<ArtifactCoords, ResolvedDependency> allDepsToBuild = new HashMap<>();
291293
private final Set<ArtifactCoords> nonManagedVisited = new HashSet<>();
@@ -625,7 +627,7 @@ private static Set<ArtifactCoords> toArtifactCoords(Collection<Dependency> deps)
625627
for (var d : deps) {
626628
result.add(toCoords(d.getArtifact()));
627629
}
628-
return result;
630+
return Collections.unmodifiableSet(result);
629631
}
630632

631633
public void resolveDependencies() {
@@ -643,6 +645,17 @@ void resolveDependenciesInternal() {
643645
enforcedConstraints.addAll(getBomConstraints(bomCoords));
644646
}
645647
allConstraints = toArtifactCoords(enforcedConstraints);
648+
allConstraintsByGa = Collections.unmodifiableMap(
649+
allConstraints.stream()
650+
.collect(
651+
HashMap::new,
652+
(m, gav) -> m.put(new GACT(
653+
gav.getGroupId(),
654+
gav.getArtifactId(),
655+
gav.getClassifier(),
656+
gav.getType()),
657+
gav),
658+
(m1, m2) -> m1.putAll(m2)));
646659
if (artifactConstraintsProvider == null) {
647660
artifactConstraintsProvider = t -> enforcedConstraints;
648661
}
@@ -997,8 +1010,7 @@ private void configureReleaseRepoDeps() {
9971010
}
9981011
for (Dependency directDep : descriptor.getDependencies()) {
9991012
final Artifact a = directDep.getArtifact();
1000-
final ArtifactDependency dirArt = artifactDeps.get(ArtifactCoords.of(a.getGroupId(), a.getArtifactId(),
1001-
a.getClassifier(), a.getExtension(), a.getVersion()));
1013+
final ArtifactDependency dirArt = artifactDeps.get(toManagedCoords(a));
10021014
if (dirArt != null) {
10031015
d.addDependency(dirArt);
10041016
}
@@ -1014,6 +1026,16 @@ private void configureReleaseRepoDeps() {
10141026
}
10151027
}
10161028

1029+
private ArtifactCoords toManagedCoords(Artifact a) {
1030+
final ArtifactCoords managed = allConstraintsByGa.get(new GACT(a.getGroupId(), a.getArtifactId(),
1031+
a.getClassifier(), a.getExtension()));
1032+
if (managed != null) {
1033+
return managed;
1034+
}
1035+
return ArtifactCoords.of(a.getGroupId(), a.getArtifactId(),
1036+
a.getClassifier(), a.getExtension(), a.getVersion());
1037+
}
1038+
10171039
private ScmRevision getRevision(ArtifactCoords coords, List<RemoteRepository> repos) {
10181040
final ScmRevision revision;
10191041
if (this.preResolvedRootArtifacts.containsKey(coords)) {
@@ -1712,4 +1734,5 @@ private static GAV toGav(ArtifactCoords coords) {
17121734
private static ArtifactCoords toCoords(Artifact a) {
17131735
return ArtifactCoords.of(a.getGroupId(), a.getArtifactId(), a.getClassifier(), a.getExtension(), a.getVersion());
17141736
}
1737+
17151738
}

domino/api/src/test/java/io/quarkus/domino/NonCorePlatformMemberDependenciesTest.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,16 @@ static void prepareRepo() {
3737
.setTag("1.0");
3838
var byteUtilsLib = byteUtilsProject.createMainModule("byte-utils");
3939

40-
var commonsIoProject = TestProject.of("org.commons.io", "1.0")
40+
var commonsIoProject10 = TestProject.of("org.commons.io", "1.0")
4141
.setRepoUrl("https://commons.org/code/io")
4242
.setTag("1.0");
43-
var commonsIoLib = commonsIoProject.createMainModule("commons-io")
43+
var commonsIoLib10 = commonsIoProject10.createMainModule("commons-io")
44+
.addDependency(byteUtilsLib);
45+
46+
var commonsIoProject09 = TestProject.of("org.commons.io", "0.9")
47+
.setRepoUrl("https://commons.org/code/io")
48+
.setTag("0.9");
49+
var commonsIoLib09 = commonsIoProject09.createMainModule("commons-io")
4450
.addDependency(byteUtilsLib);
4551

4652
var quarkusProject = TestProject.of("io.quarkus", "1.0")
@@ -52,7 +58,7 @@ static void prepareRepo() {
5258
var quarkusBuildParent = quarkusParent.addPomModule("quarkus-build-parent")
5359
.importBom(quarkusBom);
5460
var quarkusCore = quarkusBuildParent.addModule("quarkus-core")
55-
.addDependency(commonsIoLib);
61+
.addDependency(commonsIoLib09);
5662

5763
var filesLibProject = TestProject.of("org.files", "1.0")
5864
.setRepoUrl("https://files.org/code")
@@ -73,7 +79,7 @@ static void prepareRepo() {
7379
.addVersionConstraint("camel-core")
7480
.addVersionConstraint("camel-xml-lib")
7581
.addVersionConstraint(xmlLib)
76-
.addVersionConstraint(commonsIoLib);
82+
.addVersionConstraint(commonsIoLib10);
7783
var camelBuildParent = camelParent.addPomModule("camel-build-parent")
7884
.importBom(camelBom);
7985
var camelCore = camelBuildParent.addModule("camel-core")
@@ -86,7 +92,8 @@ static void prepareRepo() {
8692
.install(camelProject)
8793
.install(filesLibProject)
8894
.install(xmlLibProject)
89-
.install(commonsIoProject)
95+
.install(commonsIoProject10)
96+
.install(commonsIoProject09)
9097
.install(byteUtilsProject);
9198

9299
releaseAssertions = Map.<ScmRevision, Consumer<ReleaseRepo>> of(
@@ -101,6 +108,8 @@ static void prepareRepo() {
101108
.containsKey(ArtifactCoords.pom("io.quarkus", "quarkus-build-parent", "1.0"));
102109
assertThat(release.getArtifacts()).containsKey(ArtifactCoords.jar("io.quarkus", "quarkus-core", "1.0"));
103110
assertThat(release.getDependencies()).hasSize(1);
111+
assertThat(release.getDependencies().iterator().next().artifacts)
112+
.containsKey(ArtifactCoords.jar("org.commons.io", "commons-io", "1.0"));
104113
},
105114
ReleaseIdFactory.forScmAndTag("https://camel.org/code", "1.0"),
106115
release -> {
@@ -127,6 +136,13 @@ static void prepareRepo() {
127136
assertThat(release.getArtifacts()).hasSize(1);
128137
assertThat(release.getArtifacts()).containsKey(ArtifactCoords.jar("org.commons.io", "commons-io", "1.0"));
129138
},
139+
ReleaseIdFactory.forScmAndTag("https://commons.org/code/io", "1.1"),
140+
release -> {
141+
assertThat(release.getRevision())
142+
.isEqualTo(ReleaseIdFactory.forScmAndTag("https://commons.org/code/io", "1.1"));
143+
assertThat(release.getArtifacts()).hasSize(1);
144+
assertThat(release.getArtifacts()).containsKey(ArtifactCoords.jar("org.commons.io", "commons-io", "1.1"));
145+
},
130146
ReleaseIdFactory.forScmAndTag("https://bytes.org/code", "1.0"),
131147
release -> {
132148
assertThat(release.getRevision()).isEqualTo(ReleaseIdFactory.forScmAndTag("https://bytes.org/code", "1.0"));
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<parent>
5+
<groupId>org.acme</groupId>
6+
<artifactId>acme-parent</artifactId>
7+
<version>1.0</version>
8+
</parent>
9+
<artifactId>acme-api</artifactId>
10+
<name>Acme API</name>
11+
<description>Description of acme-api</description>
12+
<dependencyManagement>
13+
<dependencies>
14+
<dependency>
15+
<groupId>org.acme</groupId>
16+
<artifactId>acme-bom</artifactId>
17+
<version>${project.version}</version>
18+
<type>pom</type>
19+
<scope>import</scope>
20+
</dependency>
21+
</dependencies>
22+
</dependencyManagement>
23+
</project>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?xml version="1.0"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<parent>
5+
<groupId>org.acme</groupId>
6+
<artifactId>acme-parent</artifactId>
7+
<version>1.0</version>
8+
</parent>
9+
<artifactId>acme-bom</artifactId>
10+
<name>Acme BOM</name>
11+
<description>Description of acme-bom</description>
12+
<packaging>pom</packaging>
13+
<dependencyManagement>
14+
<dependencies>
15+
<dependency>
16+
<groupId>${project.groupId}</groupId>
17+
<artifactId>acme-api</artifactId>
18+
<version>${project.version}</version>
19+
</dependency>
20+
<dependency>
21+
<groupId>${project.groupId}</groupId>
22+
<artifactId>acme-library</artifactId>
23+
<version>${project.version}</version>
24+
</dependency>
25+
<dependency>
26+
<groupId>commons-codec</groupId>
27+
<artifactId>commons-codec</artifactId>
28+
<version>1.19.0</version>
29+
</dependency>
30+
</dependencies>
31+
</dependencyManagement>
32+
</project>
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version="1.0"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<parent>
5+
<groupId>org.acme</groupId>
6+
<artifactId>acme-parent</artifactId>
7+
<version>1.0</version>
8+
</parent>
9+
<artifactId>acme-library</artifactId>
10+
<name>Acme Library</name>
11+
<description>Description of acme-library</description>
12+
<dependencyManagement>
13+
<dependencies>
14+
<dependency>
15+
<groupId>org.acme</groupId>
16+
<artifactId>acme-bom</artifactId>
17+
<version>${project.version}</version>
18+
<type>pom</type>
19+
<scope>import</scope>
20+
</dependency>
21+
</dependencies>
22+
</dependencyManagement>
23+
<dependencies>
24+
<dependency>
25+
<groupId>org.acme</groupId>
26+
<artifactId>acme-api</artifactId>
27+
</dependency>
28+
<dependency>
29+
<groupId>commons-codec</groupId>
30+
<artifactId>commons-codec</artifactId>
31+
<version>1.18.0</version>
32+
</dependency>
33+
</dependencies>
34+
</project>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<groupId>org.acme</groupId>
5+
<artifactId>acme-parent</artifactId>
6+
<version>1.0</version>
7+
<name>Acme Parent</name>
8+
<packaging>pom</packaging>
9+
<description>Description of acme-parent</description>
10+
<scm>
11+
<url>https://github.com/acme/acme-parent</url>
12+
<tag>1.0</tag>
13+
</scm>
14+
<licenses>
15+
<license>
16+
<name>The Apache Software License, Version 2.0</name>
17+
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
18+
</license>
19+
</licenses>
20+
<modules>
21+
<module>bom</module>
22+
<module>api</module>
23+
<module>library</module>
24+
</modules>
25+
</project>

0 commit comments

Comments
 (0)