Skip to content

Commit 82e3d9d

Browse files
committed
Attempt at fixing enforce***
1 parent 8128aa0 commit 82e3d9d

File tree

4 files changed

+63
-0
lines changed

4 files changed

+63
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.gradlex.jvm.dependency.conflict.resolution;
2+
3+
import org.gradle.api.Action;
4+
import org.gradle.api.artifacts.Configuration;
5+
import org.gradle.api.artifacts.component.ComponentSelector;
6+
import org.gradlex.jvm.dependency.conflict.detection.rules.logging.LoggingModuleIdentifiers;
7+
8+
public class Log4J2EnforcementSubstitutionsUsing implements Action<Configuration> {
9+
@Override
10+
public void execute(Configuration configuration) {
11+
configuration.getResolutionStrategy().dependencySubstitution(substitution -> {
12+
// TODO We are missing substitutions here
13+
14+
// TODO this is wrong, it cannot be a substitution for commons-logging. It must be a dependency addition
15+
ComponentSelector jclOverLog4J = substitution.module(LoggingModuleIdentifiers.LOG4J_JCL.asFirstVersion());
16+
substitution.substitute(substitution.module(LoggingModuleIdentifiers.COMMONS_LOGGING.moduleId)).using(jclOverLog4J);
17+
substitution.substitute(substitution.module(LoggingModuleIdentifiers.LOG4J_JCL.moduleId)).using(jclOverLog4J);
18+
substitution.substitute(substitution.module(LoggingModuleIdentifiers.SPRING_JCL.moduleId)).using(jclOverLog4J);
19+
20+
});
21+
}
22+
}

src/main/java/org/gradlex/jvm/dependency/conflict/resolution/Logging.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,8 @@ public void enforceLog4J2() {
395395
selectJCLImplementation(LoggingModuleIdentifiers.LOG4J_JCL.moduleId);
396396
selectLog4J12Implementation(LoggingModuleIdentifiers.LOG4J12API.moduleId);
397397

398+
getConfigurations().all(new Log4J2EnforcementSubstitutionsUsing());
399+
398400
}
399401

400402
/**

src/main/java/org/gradlex/jvm/dependency/conflict/resolution/Slf4JEnforcementSubstitutionsUsing.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public void execute(Configuration configuration) {
3131

3232
substitution.substitute(substitution.module(LoggingModuleIdentifiers.LOG4J_JUL.moduleId)).using(substitution.module(LoggingModuleIdentifiers.JUL_TO_SLF4J.asFirstVersion()));
3333

34+
// TODO this is wrong, it cannot be a substitution for commons-logging. It must be a dependency addition
3435
ComponentSelector jclOverSlf4J = substitution.module(LoggingModuleIdentifiers.JCL_OVER_SLF4J.asFirstVersion());
3536
substitution.substitute(substitution.module(LoggingModuleIdentifiers.COMMONS_LOGGING.moduleId)).using(jclOverSlf4J);
3637
substitution.substitute(substitution.module(LoggingModuleIdentifiers.LOG4J_JCL.moduleId)).using(jclOverSlf4J);

src/test/groovy/org/gradlex/jvm/dependency/conflict/test/logging/LoggingCapabilitiesPluginSelectionFunctionalTest.groovy

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,4 +328,42 @@ ${additional.collect { " runtimeOnly(\"$it\")" }.join("\n")}
328328
then:
329329
outcomeOf(result, ':doIt') == SUCCESS
330330
}
331+
332+
def "issue 119"() {
333+
given:
334+
withBuildScript("""
335+
plugins {
336+
`java-library`
337+
id("org.gradlex.jvm-dependency-conflict-resolution")
338+
}
339+
340+
repositories {
341+
mavenCentral()
342+
}
343+
344+
jvmDependencyConflicts.logging {
345+
enforceLog4J2()
346+
}
347+
348+
dependencies {
349+
implementation("log4j:log4j:1.2.17")
350+
implementation("ch.qos.reload4j:reload4j:1.2.25")
351+
implementation("org.slf4j:slf4j-api:2.0.13")
352+
implementation("commons-logging:commons-logging:1.3.1")
353+
implementation("org.apache.logging.log4j:log4j-api:2.23.1")
354+
implementation("org.apache.logging.log4j:log4j-slf4j-impl:2.23.1")
355+
}
356+
357+
tasks.register("doIt") {
358+
doLast {
359+
println(configurations["runtimeClasspath"].files)
360+
}
361+
}
362+
""")
363+
when:
364+
def result = build(['doIt', 'dependencies', '--configuration', 'runtimeClasspath'])
365+
366+
then:
367+
outcomeOf(result, ':doIt') == SUCCESS
368+
}
331369
}

0 commit comments

Comments
 (0)