Skip to content

Commit 4c113a9

Browse files
authored
Tweak Jakarta rules (#221)
1 parent 19d3f58 commit 4c113a9

File tree

8 files changed

+90
-40
lines changed

8 files changed

+90
-40
lines changed

samples/sample-all-deactivated/build.gradle.kts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ dependencies {
130130
implementation("org.apache.tomcat:tomcat-servlet-api:11.0.6")
131131
implementation("org.apache.tomcat:tomcat-websocket-api:11.0.6")
132132
implementation("org.apache.tomcat:tomcat-websocket-client-api:11.0.6")
133-
implementation("org.apache.tomcat:tomcat-websocket:11.0.6")
134133
implementation("org.apache.velocity:velocity-engine-core:2.4.1")
135134
implementation("org.apache.velocity:velocity:1.7")
136135
implementation("org.bouncycastle:bc-fips-debug:2.1.0")
@@ -201,7 +200,6 @@ dependencies {
201200
implementation("org.codehaus.woodstox:wstx-asl:4.0.6")
202201
implementation("org.codehaus.woodstox:wstx-lgpl:3.2.9")
203202
implementation("org.dom4j:dom4j:2.1.4")
204-
implementation("org.eclipse.angus:angus-activation:2.0.2")
205203
implementation("org.eclipse.angus:jakarta.mail:2.0.3")
206204
implementation("org.eclipse.jetty.toolchain:jetty-jakarta-servlet-api:5.0.2")
207205
implementation("org.eclipse.jetty.toolchain:jetty-jakarta-websocket-api:2.0.0")

samples/sample-all-deactivated/build.out

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ compileClasspath - Compile classpath for source set 'main'.
7575
+--- javax.el:javax.el-api:3.0.0 FAILED
7676
+--- javax.inject:javax.inject:1 FAILED
7777
+--- javax.json:javax.json-api:1.1.4 FAILED
78-
+--- javax.jws:javax.jws-api:1.1 FAILED
78+
+--- javax.jws:javax.jws-api:1.1
7979
+--- javax.mail:javax.mail-api:1.6.2 FAILED
8080
+--- javax.mail:mail:1.4.7 FAILED
8181
+--- javax.persistence:javax.persistence-api:2.2 FAILED
@@ -98,7 +98,10 @@ compileClasspath - Compile classpath for source set 'main'.
9898
| \--- javax.activation:javax.activation-api:1.2.0 FAILED
9999
+--- javax.xml.soap:javax.xml.soap-api:1.4.0
100100
+--- javax.xml.stream:stax-api:1.0-2 FAILED
101-
+--- javax.xml.ws:jaxws-api:2.3.1 FAILED
101+
+--- javax.xml.ws:jaxws-api:2.3.1
102+
| +--- javax.xml.bind:jaxb-api:2.3.1 (*)
103+
| +--- javax.xml.soap:javax.xml.soap-api:1.4.0
104+
| \--- javax.annotation:javax.annotation-api:1.3.2 FAILED
102105
+--- jboss:javassist:3.8.0.GA FAILED
103106
+--- junit:junit-dep:4.11 FAILED
104107
+--- junit:junit:4.13.2 FAILED
@@ -135,7 +138,6 @@ compileClasspath - Compile classpath for source set 'main'.
135138
+--- org.apache.tomcat:tomcat-servlet-api:11.0.6 FAILED
136139
+--- org.apache.tomcat:tomcat-websocket-api:11.0.6 FAILED
137140
+--- org.apache.tomcat:tomcat-websocket-client-api:11.0.6 FAILED
138-
+--- org.apache.tomcat:tomcat-websocket:11.0.6 FAILED
139141
+--- org.apache.velocity:velocity-engine-core:2.4.1 FAILED
140142
+--- org.apache.velocity:velocity:1.7 FAILED
141143
+--- org.bouncycastle:bc-fips-debug:2.1.0 FAILED
@@ -206,8 +208,6 @@ compileClasspath - Compile classpath for source set 'main'.
206208
+--- org.codehaus.woodstox:wstx-asl:4.0.6 FAILED
207209
+--- org.codehaus.woodstox:wstx-lgpl:3.2.9 FAILED
208210
+--- org.dom4j:dom4j:2.1.4 FAILED
209-
+--- org.eclipse.angus:angus-activation:2.0.2
210-
| \--- jakarta.activation:jakarta.activation-api:2.1.3 FAILED
211211
+--- org.eclipse.angus:jakarta.mail:2.0.3 FAILED
212212
+--- org.eclipse.jetty.toolchain:jetty-jakarta-servlet-api:5.0.2 FAILED
213213
+--- org.eclipse.jetty.toolchain:jetty-jakarta-websocket-api:2.0.0 FAILED

samples/sample-all/build.gradle.kts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ dependencies {
133133
implementation("org.apache.tomcat:tomcat-servlet-api:11.0.6")
134134
implementation("org.apache.tomcat:tomcat-websocket-api:11.0.6")
135135
implementation("org.apache.tomcat:tomcat-websocket-client-api:11.0.6")
136-
implementation("org.apache.tomcat:tomcat-websocket:11.0.6")
137136
implementation("org.apache.velocity:velocity-engine-core:2.4.1")
138137
implementation("org.apache.velocity:velocity:1.7")
139138
implementation("org.bouncycastle:bc-fips-debug:2.1.0")
@@ -204,7 +203,6 @@ dependencies {
204203
implementation("org.codehaus.woodstox:wstx-asl:4.0.6")
205204
implementation("org.codehaus.woodstox:wstx-lgpl:3.2.9")
206205
implementation("org.dom4j:dom4j:2.1.4")
207-
implementation("org.eclipse.angus:angus-activation:2.0.2")
208206
implementation("org.eclipse.angus:jakarta.mail:2.0.3")
209207
implementation("org.eclipse.jetty.toolchain:jetty-jakarta-servlet-api:5.0.2")
210208
implementation("org.eclipse.jetty.toolchain:jetty-jakarta-websocket-api:2.0.0")

samples/sample-all/build.out

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,7 @@ compileClasspath - Compile classpath for source set 'main'.
111111
+--- javax.el:javax.el-api:3.0.0
112112
+--- javax.inject:javax.inject:1 -> com.jwebmp:javax.inject:1.1
113113
+--- javax.json:javax.json-api:1.1.4
114-
+--- javax.jws:javax.jws-api:1.1 -> javax.xml.ws:jaxws-api:2.3.1
115-
| +--- javax.xml.bind:jaxb-api:2.3.1
116-
| | \--- javax.activation:javax.activation-api:1.2.0
117-
| +--- javax.xml.soap:javax.xml.soap-api:1.4.0
118-
| \--- javax.annotation:javax.annotation-api:1.3.2
114+
+--- javax.jws:javax.jws-api:1.1
119115
+--- javax.mail:javax.mail-api:1.6.2 -> com.sun.mail:javax.mail:1.6.2 (*)
120116
+--- javax.mail:mail:1.4.7 -> com.sun.mail:javax.mail:1.6.2 (*)
121117
+--- javax.persistence:javax.persistence-api:2.2
@@ -134,10 +130,14 @@ compileClasspath - Compile classpath for source set 'main'.
134130
+--- javax.websocket:javax.websocket-client-api:1.1 -> org.eclipse.jetty.toolchain:jetty-javax-websocket-api:1.1.2
135131
+--- javax.ws.rs:javax.ws.rs-api:2.1.1 -> org.jboss.resteasy:jaxrs-api:3.0.12.Final
136132
+--- javax.ws.rs:jsr311-api:1.1.1 -> org.jboss.resteasy:jaxrs-api:3.0.12.Final
137-
+--- javax.xml.bind:jaxb-api:2.3.1 (*)
133+
+--- javax.xml.bind:jaxb-api:2.3.1
134+
| \--- javax.activation:javax.activation-api:1.2.0
138135
+--- javax.xml.soap:javax.xml.soap-api:1.4.0
139136
+--- javax.xml.stream:stax-api:1.0-2 -> stax:stax-api:1.0.1
140-
+--- javax.xml.ws:jaxws-api:2.3.1 (*)
137+
+--- javax.xml.ws:jaxws-api:2.3.1
138+
| +--- javax.xml.bind:jaxb-api:2.3.1 (*)
139+
| +--- javax.xml.soap:javax.xml.soap-api:1.4.0
140+
| \--- javax.annotation:javax.annotation-api:1.3.2
141141
+--- jboss:javassist:3.8.0.GA -> org.javassist:javassist:3.30.2-GA
142142
+--- junit:junit-dep:4.11 -> junit:junit:4.13.2
143143
| \--- org.hamcrest:hamcrest-core:1.3 -> org.hamcrest:hamcrest:3.0
@@ -195,7 +195,6 @@ compileClasspath - Compile classpath for source set 'main'.
195195
+--- org.apache.tomcat:tomcat-servlet-api:11.0.6 -> jakarta.servlet:jakarta.servlet-api:6.1.0
196196
+--- org.apache.tomcat:tomcat-websocket-api:11.0.6 -> jakarta.websocket:jakarta.websocket-api:2.2.0
197197
+--- org.apache.tomcat:tomcat-websocket-client-api:11.0.6 -> jakarta.websocket:jakarta.websocket-client-api:2.2.0
198-
+--- org.apache.tomcat:tomcat-websocket:11.0.6 -> jakarta.websocket:jakarta.websocket-api:2.2.0
199198
+--- org.apache.velocity:velocity-engine-core:2.4.1
200199
| +--- org.apache.commons:commons-lang3:3.17.0
201200
| \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17 (*)
@@ -277,8 +276,6 @@ compileClasspath - Compile classpath for source set 'main'.
277276
+--- org.codehaus.woodstox:wstx-asl:4.0.6 -> org.codehaus.woodstox:woodstox-core-asl:4.4.1 (*)
278277
+--- org.codehaus.woodstox:wstx-lgpl:3.2.9 -> org.codehaus.woodstox:woodstox-core-asl:4.4.1 (*)
279278
+--- org.dom4j:dom4j:2.1.4
280-
+--- org.eclipse.angus:angus-activation:2.0.2
281-
| \--- jakarta.activation:jakarta.activation-api:2.1.3
282279
+--- org.eclipse.angus:jakarta.mail:2.0.3 -> jakarta.mail:jakarta.mail-api:2.1.3 (*)
283280
+--- org.eclipse.jetty.toolchain:jetty-jakarta-servlet-api:5.0.2 -> jakarta.servlet:jakarta.servlet-api:6.1.0
284281
+--- org.eclipse.jetty.toolchain:jetty-jakarta-websocket-api:2.0.0 -> jakarta.websocket:jakarta.websocket-api:2.2.0

src/main/java/org/gradlex/jvm/dependency/conflict/detection/rules/CapabilityDefinition.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@
1919
import org.gradlex.jvm.dependency.conflict.detection.rules.aopalliance.AopallianceRule;
2020
import org.gradlex.jvm.dependency.conflict.detection.rules.guava.GuavaListenableFutureRule;
2121
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JakartaActivationApiRule;
22-
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JakartaActivationImplementationRule;
2322
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JakartaAnnotationApiRule;
24-
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JakartaJwsApisRule;
23+
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JakartaJwsApiRule;
2524
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JakartaMailApiRule;
2625
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JakartaServletApiRule;
2726
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JakartaWebsocketApiRule;
@@ -44,6 +43,8 @@
4443
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JavaxValidationApiRule;
4544
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JavaxWebsocketApiRule;
4645
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JavaxWsRsApiRule;
46+
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JavaxXmlBindApiRule;
47+
import org.gradlex.jvm.dependency.conflict.detection.rules.jakarta.JavaxXmlWsApiRule;
4748
import org.gradlex.jvm.dependency.conflict.detection.rules.logging.LoggingModuleIdentifiers;
4849
import org.gradlex.jvm.dependency.conflict.resolution.DefaultResolutionStrategy;
4950

@@ -280,10 +281,6 @@ public enum CapabilityDefinition {
280281
"jakarta.activation:jakarta.activation-api",
281282
"com.sun.activation:jakarta.activation"
282283
),
283-
JAKARTA_ACTIVATION_IMPL(HIGHEST_VERSION, JakartaActivationImplementationRule.class,
284-
"com.sun.activation:jakarta.activation",
285-
"org.eclipse.angus:angus-activation"
286-
),
287284
JAKARTA_ANNOTATION_API(HIGHEST_VERSION, JakartaAnnotationApiRule.class,
288285
"jakarta.annotation:jakarta.annotation-api",
289286
"org.apache.tomcat:tomcat-annotations-api"
@@ -307,14 +304,12 @@ public enum CapabilityDefinition {
307304
JAKARTA_WEBSOCKET_API(HIGHEST_VERSION, JakartaWebsocketApiRule.class,
308305
"jakarta.websocket:jakarta.websocket-api",
309306
"org.apache.tomcat:tomcat-websocket-api",
310-
"org.apache.tomcat:tomcat-websocket",
311307
"org.apache.tomcat.embed:tomcat-embed-websocket",
312308
"org.eclipse.jetty.toolchain:jetty-jakarta-websocket-api"
313309
),
314310
JAKARTA_WEBSOCKET_CLIENT_API(HIGHEST_VERSION, JakartaWebsocketClientApiRule.class,
315311
"jakarta.websocket:jakarta.websocket-client-api",
316312
"org.apache.tomcat:tomcat-websocket-client-api",
317-
"org.apache.tomcat:tomcat-websocket",
318313
"org.apache.tomcat.embed:tomcat-embed-websocket",
319314
"org.eclipse.jetty.toolchain:jetty-jakarta-websocket-api"
320315
),
@@ -361,9 +356,7 @@ public enum CapabilityDefinition {
361356
),
362357
JAVAX_JWS_API(HIGHEST_VERSION, JavaxJwsApisRule.class,
363358
"javax.jws:javax.jws-api",
364-
"javax.xml.ws:jaxws-api",
365-
"jakarta.jws:jakarta.jws-api",
366-
"jakarta.xml.ws:jakarta.xml.ws-api"
359+
"jakarta.jws:jakarta.jws-api"
367360
),
368361
JAVAX_MAIL_API(HIGHEST_VERSION, JavaxMailApiRule.class,
369362
"com.sun.mail:mailapi", // API only
@@ -446,7 +439,15 @@ public enum CapabilityDefinition {
446439
"jakarta.ws.rs:jakarta.ws.rs-api",
447440
"javax.ws.rs:javax.ws.rs-api"
448441
),
449-
JAKARTA_JWS_API(HIGHEST_VERSION, JakartaJwsApisRule.class,
442+
JAVAX_XML_BIND_API(HIGHEST_VERSION, JavaxXmlBindApiRule.class,
443+
"javax.xml.bind:jaxb-api",
444+
"jakarta.xml.bind:jakarta.xml.bind-api"
445+
),
446+
JAVAX_XML_WS_API(HIGHEST_VERSION, JavaxXmlWsApiRule.class,
447+
"javax.xml.ws:jaxws-api",
448+
"jakarta.xml.ws:jakarta.xml.ws-api"
449+
),
450+
JAKARTA_JWS_API(HIGHEST_VERSION, JakartaJwsApiRule.class,
450451
"jakarta.jws:jakarta.jws-api",
451452
"jakarta.xml.ws:jakarta.xml.ws-api"
452453
),
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright the GradleX team.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.gradlex.jvm.dependency.conflict.detection.rules.jakarta;
18+
19+
import org.gradle.api.artifacts.CacheableRule;
20+
import org.gradle.api.artifacts.ModuleVersionIdentifier;
21+
import org.gradlex.jvm.dependency.conflict.detection.rules.CapabilityDefinition;
22+
import org.gradlex.jvm.dependency.conflict.detection.rules.CapabilityDefinitionRule;
23+
import org.gradlex.jvm.dependency.conflict.detection.util.VersionNumber;
24+
25+
import javax.inject.Inject;
26+
27+
@CacheableRule
28+
public abstract class JakartaJwsApiRule extends CapabilityDefinitionRule {
29+
30+
private static final String JWS_MERGER_VERSION = "4.0.0";
31+
32+
@Inject
33+
public JakartaJwsApiRule(CapabilityDefinition rule) {
34+
super(rule);
35+
}
36+
37+
@Override
38+
protected boolean shouldApply(ModuleVersionIdentifier id) {
39+
if (id.getName().equals("jakarta.xml.ws:jakarta.xml.ws-api")) {
40+
return VersionNumber.parse(getVersion(id)).compareTo(VersionNumber.parse(JWS_MERGER_VERSION)) >= 0;
41+
}
42+
return true;
43+
}
44+
}
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@
2525
import javax.inject.Inject;
2626

2727
@CacheableRule
28-
public abstract class JakartaJwsApisRule extends CapabilityDefinitionRule {
28+
public abstract class JavaxXmlBindApiRule extends CapabilityDefinitionRule {
29+
30+
static final String FIRST_JAKARTA_VERSION = "3.0.0";
2931

3032
@Inject
31-
public JakartaJwsApisRule(CapabilityDefinition rule) {
33+
public JavaxXmlBindApiRule(CapabilityDefinition rule) {
3234
super(rule);
3335
}
3436

3537
@Override
3638
protected boolean shouldApply(ModuleVersionIdentifier id) {
37-
return VersionNumber.parse(getVersion(id)).compareTo(VersionNumber.parse(JavaxJwsApisRule.FIRST_JAKARTA_VERSION)) >= 0;
39+
return VersionNumber.parse(id.getVersion()).compareTo(VersionNumber.parse(FIRST_JAKARTA_VERSION)) < 0;
3840
}
3941
}

src/test/groovy/org/gradlex/jvm/dependency/conflict/test/JarOverlapTest.groovy

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ class JarOverlapTest extends Specification {
1515

1616
// Some Jars do not have overlapping classes, but contain conflicting implementations of the same service.
1717
static def expectedToOverlap = values() - [
18+
HAMCREST_CORE, // contains 'IsDeprecated.class' and forwards to HAMCREST
19+
HAMCREST_LIBRARY, // contains 'IsDeprecated.class' and forwards to HAMCREST
20+
LOG4J2_IMPL,
21+
SLF4J_IMPL, // register conflicting service implementations
1822
SLF4J_VS_JCL, // bridge vs. replacement
23+
SLF4J_VS_JUL,
1924
SLF4J_VS_LOG4J2_FOR_JCL, // SLF4J replaces JCL, while LOG4J depends on JCL
20-
SLF4J_IMPL, // register conflicting service implementations
21-
SLF4J_VS_LOG4J2_FOR_JUL, // register conflicting handler implementations
22-
HAMCREST_CORE, // contains 'IsDeprecated.class' and forwards to HAMCREST
23-
HAMCREST_LIBRARY // contains 'IsDeprecated.class' and forwards to HAMCREST
25+
SLF4J_VS_LOG4J2_FOR_JUL // register conflicting handler implementations
2426
]
2527

2628
def latestVersions = []
@@ -65,7 +67,7 @@ class JarOverlapTest extends Specification {
6567
List<Tuple2<String, Set<String>>> jarClassFiles = conf.files.collect { jar ->
6668
def jarName = jar.name
6769
new Tuple2(jarName, new ZipFile(jar).withCloseable {
68-
it.entries().collect { entry -> entry.name }.findAll { it.endsWith(".class") } as Set
70+
it.entries().collect { entry -> entry.name }.findAll { it.endsWith(".class") && !it.endsWith("module-info.class") } as Set
6971
})
7072
}
7173

@@ -92,7 +94,9 @@ class JarOverlapTest extends Specification {
9294
case JAVAX_INJECT_API:
9395
return ["jakarta.inject:jakarta.inject-api:1.0.5"]
9496
case JAVAX_JSON_API:
95-
return ["jakarta.json:jakarta.json-api:1.1.6"]
97+
return ["jakarta.json:jakarta.json-api:1.1.6", "org.glassfish:jakarta.json:1.1.6"]
98+
case JAVAX_JWS_API:
99+
return ["jakarta.jws:jakarta.jws-api:1.1.1"]
96100
case JAVAX_MAIL_API:
97101
return ["com.sun.mail:mailapi:1.6.7", "jakarta.mail:jakarta.mail-api:1.6.7", "com.sun.mail:jakarta.mail:1.6.7"]
98102
case JAVAX_PERSISTENCE_API:
@@ -104,6 +108,8 @@ class JarOverlapTest extends Specification {
104108
return ["jakarta.servlet.jsp:jakarta.servlet.jsp-api:2.3.6"]
105109
case JAVAX_SERVLET_JSTL:
106110
return ["jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:1.2.7"]
111+
case JAVAX_SOAP_API:
112+
return ["jakarta.xml.soap:jakarta.xml.soap-api:1.4.2"]
107113
case JAVAX_TRANSACTION_API:
108114
return ["jakarta.transaction:jakarta.transaction-api:1.3.3"]
109115
case JAVAX_VALIDATION_API:
@@ -114,6 +120,10 @@ class JarOverlapTest extends Specification {
114120
"org.apache.tomcat.embed:tomcat-embed-websocket:9.0.104"]
115121
case JAVAX_WS_RS_API:
116122
return ["jakarta.ws.rs:jakarta.ws.rs-api:2.1.6"]
123+
case JAVAX_XML_BIND_API:
124+
return ["jakarta.xml.bind:jakarta.xml.bind-api:2.3.3"]
125+
case JAVAX_XML_WS_API:
126+
return ["jakarta.xml.ws:jakarta.xml.ws-api:2.3.3"]
117127
default:
118128
return []
119129
}

0 commit comments

Comments
 (0)