Skip to content

Commit 943eb25

Browse files
committed
Fix dependency is ignored when previously found with other scope
Currently if a maven dependency is reachable to different chains of dependencies it can happen that the first visited one is from an excluded scope. In this case the maven-target marks the dependency as already processed but then ignore it. If it now appears later with a valid scope it is ignored because already processed. This now changes the check so it first test if it is a valid scope before processing it any further.
1 parent a9d0eeb commit 943eb25

File tree

3 files changed

+50
-3
lines changed

3 files changed

+50
-3
lines changed

org.eclipse.m2e.pde.target.tests/src/org/eclipse/m2e/pde/target/tests/AbstractMavenTargetTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ private static <T> boolean isOriginalArtifact(ExpectedUnit expectedUnit, T unit,
126126
if (key == null) {
127127
return false;
128128
}
129+
if (key.groupId().equals("-")) {
130+
return true;
131+
}
129132
URI location = getLocation.apply(unit);
130133
String expectedPathSuffix = "/" + String.join("/", "repository", key.groupId().replace('.', '/'),
131134
key.artifactId(), key.version(), key.artifactId() + "-" + key.version() + ".jar");
@@ -134,6 +137,10 @@ private static <T> boolean isOriginalArtifact(ExpectedUnit expectedUnit, T unit,
134137

135138
// --- assertion utilities for Bundles in target ---
136139

140+
static ExpectedBundle bundle(String bsn, String version) {
141+
return new ExpectedBundle(bsn, version, false, true, new ArtifactKey("-", bsn, version, ""));
142+
}
143+
137144
static ExpectedBundle originalOSGiBundle(String bsn, String version, String groupArtifact) {
138145
return originalOSGiBundle(bsn, version, groupArtifact, version);
139146
}

org.eclipse.m2e.pde.target.tests/src/org/eclipse/m2e/pde/target/tests/MavenContentTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,45 @@ public void testIncludeProvidedInfinite() throws Exception {
4747
originalOSGiBundle("org.osgi.resource", "1.0.0.201505202023", "org.osgi:org.osgi.resource", "1.0.0"));
4848
assertTargetBundles(target, expectedBundles);
4949
}
50+
51+
@Test
52+
public void testJettyWithInDependencies() throws Exception {
53+
ITargetLocation target = resolveMavenTarget(
54+
"""
55+
<location includeDependencyDepth="infinite" includeDependencyScopes="compile,provided,runtime" includeSource="false" label="Jetty" missingManifest="error" type="Maven">
56+
<dependencies>
57+
<dependency>
58+
<groupId>org.eclipse.jetty.ee10.websocket</groupId>
59+
<artifactId>jetty-ee10-websocket-jakarta-server</artifactId>
60+
<version>12.0.9</version>
61+
<type>jar</type>
62+
</dependency>
63+
</dependencies>
64+
</location>
65+
""");
66+
assertStatusOk(getTargetStatus(target));
67+
List<ExpectedBundle> expectedBundles = List.of(bundle("org.eclipse.jetty.ee10.plus", "12.0.9"),
68+
bundle("jakarta.enterprise.lang-model", "4.0.1"), bundle("jakarta.transaction-api", "2.0.1"),
69+
bundle("org.eclipse.jetty.http", "12.0.9"), bundle("slf4j.api", "2.0.12"),
70+
bundle("jakarta.servlet-api", "6.0.0"), bundle("org.eclipse.jetty.ee10.webapp", "12.0.9"),
71+
bundle("org.eclipse.jetty.io", "12.0.9"), bundle("org.eclipse.jetty.util", "12.0.9"),
72+
bundle("jakarta.websocket-api", "2.1.1"), bundle("org.eclipse.jetty.ee10.annotations", "12.0.9"),
73+
bundle("jakarta.annotation-api", "2.1.1"), bundle("org.eclipse.jetty.websocket.core.common", "12.0.9"),
74+
bundle("org.eclipse.jetty.jndi", "12.0.9"), bundle("org.eclipse.jetty.security", "12.0.9"),
75+
bundle("jakarta.enterprise.cdi-api", "4.0.1"), bundle("jakarta.websocket-client-api", "2.1.1"),
76+
bundle("org.eclipse.jetty.ee10.servlet", "12.0.9"),
77+
bundle("org.eclipse.jetty.websocket.core.client", "12.0.9"), bundle("org.objectweb.asm.tree", "9.7"),
78+
bundle("org.eclipse.jetty.ee10.websocket.jakarta.client", "12.0.9"),
79+
bundle("org.eclipse.jetty.server", "12.0.9"), bundle("jakarta.el-api", "5.0.0"),
80+
bundle("org.eclipse.jetty.ee10.websocket.jakarta.server", "12.0.9"),
81+
bundle("org.eclipse.jetty.ee10.websocket.servlet", "12.0.9"),
82+
bundle("org.eclipse.jetty.ee10.websocket.jakarta.common", "12.0.9"),
83+
bundle("org.eclipse.jetty.websocket.core.server", "12.0.9"),
84+
bundle("org.eclipse.jetty.client", "12.0.9"), bundle("org.eclipse.jetty.session", "12.0.9"),
85+
bundle("org.eclipse.jetty.ee", "12.0.9"), bundle("org.eclipse.jetty.plus", "12.0.9"),
86+
bundle("org.objectweb.asm.commons", "9.7"), bundle("jakarta.inject.jakarta.inject-api", "2.0.1"),
87+
bundle("org.eclipse.jetty.alpn.client", "12.0.9"), bundle("org.objectweb.asm", "9.7"),
88+
bundle("org.eclipse.jetty.xml", "12.0.9"), bundle("jakarta.interceptor-api", "2.1.0"));
89+
assertTargetBundles(target, expectedBundles);
90+
}
5091
}

org.eclipse.m2e.pde.target/src/org/eclipse/m2e/pde/target/shared/MavenDependencyCollector.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,15 @@ public DependencyResult collect(MavenRootDependency root) throws RepositoryExcep
113113
while (!queue.isEmpty()) {
114114
ArtifactDescriptor current = queue.poll();
115115
for (Dependency dependency : current.dependencies()) {
116-
if (isValidDependency(dependency)) {
116+
if (isValidDependency(dependency) && isValidScope(dependency)) {
117117
if (isVersionRanged(dependency)) {
118118
ArtifactDescriptor dependencyDescriptor = resolveHighestVersion(dependency, current.node(),
119119
artifacts, nodes);
120120
if (dependencyDescriptor != null
121121
&& collected.add(getId(dependencyDescriptor.node().getDependency()))) {
122122
queue.add(dependencyDescriptor);
123123
}
124-
}
125-
if (collected.add(getId(dependency))) {
124+
} else if (collected.add(getId(dependency))) {
126125
ArtifactDescriptor dependencyDescriptor = readArtifactDescriptor(dependency, current.node(),
127126
artifacts, nodes);
128127
if (dependencyDescriptor != null) {

0 commit comments

Comments
 (0)