Skip to content

Commit 5b2fd8a

Browse files
committed
Rework internalClusterTest to support test suites
Make InternalYamlRestTestPlugin test suites compatible Make InternalYamlRestTest and JavaRestTestPlugin test suites compatible Remove duplicate task dependency declaration of test tasks and check Fix transport-netty4 internalClusterTest Fix JavaREstTest wiring Rework dependencies declaration for repository-s3 WIP Organize repository-s3 tests in one project as test suites [CI] Auto commit changes from spotless Rely on auto detection of test framework in test suites Default test task is handled differently in Gradle
1 parent a2e580f commit 5b2fd8a

File tree

41 files changed

+534
-353
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+534
-353
lines changed

build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersPrecommitPlugin.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.gradle.api.tasks.TaskProvider;
1919

2020
import javax.inject.Inject;
21-
import java.util.stream.Collectors;
2221

2322
public class LicenseHeadersPrecommitPlugin extends PrecommitPlugin {
2423
@Inject
@@ -31,8 +30,7 @@ public TaskProvider<? extends Task> createTask(Project project) {
3130
return project.getTasks().register("licenseHeaders", LicenseHeadersTask.class, licenseHeadersTask -> {
3231
project.getPlugins().withType(JavaBasePlugin.class, javaBasePlugin -> {
3332
final SourceSetContainer sourceSets = project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets();
34-
licenseHeadersTask.getSourceFolders()
35-
.addAll(providerFactory.provider(() -> sourceSets.stream().map(s -> s.getAllJava()).collect(Collectors.toList())));
33+
sourceSets.configureEach(sourceSet -> { licenseHeadersTask.getSourceFolders().add(sourceSet.getAllJava()); });
3634
});
3735
});
3836
}

build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitTaskPlugin.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void apply(Project project) {
3434
);
3535
project.getPluginManager().withPlugin("java-base", p -> {
3636
// run compilation as part of precommit
37-
project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets().all(sourceSet ->
37+
project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets().configureEach(sourceSet ->
3838
precommit.configure(t -> t.dependsOn(sourceSet.getClassesTaskName()))
3939
);
4040
// make sure tests run after all precommit tasks

build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/BuildPluginFuncTest.groovy

+2-2
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,12 @@ class BuildPluginFuncTest extends AbstractGradleFuncTest {
137137
file("licenses/hamcrest-core-1.3.jar.sha1").text = "42a25dc3219429f0e5d060061f71acb49bf010a0"
138138
file("licenses/hamcrest-core-LICENSE.txt").text = EXAMPLE_LICENSE
139139
file("licenses/hamcrest-core-NOTICE.txt").text = "mock notice"
140-
file("licenses/junit-4.12.jar.sha1").text = "2973d150c0dc1fefe998f834810d68f278ea58ec"
140+
file("licenses/junit-4.13.2.jar.sha1").text = "2973d150c0dc1fefe998f834810d68f278ea58ec"
141141
file("licenses/junit-LICENSE.txt").text = EXAMPLE_LICENSE
142142
file("licenses/junit-NOTICE.txt").text = "mock notice"
143143
buildFile << """
144144
dependencies {
145-
api "junit:junit:4.12"
145+
api "junit:junit:4.13.2"
146146
// missing classes in thirdparty audit
147147
api 'org.hamcrest:hamcrest-core:1.3'
148148
}

build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPluginFuncTest.groovy

+5-5
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class TestingConventionsPrecommitPluginFuncTest extends AbstractGradleInternalPl
3232
"org.elasticsearch.test.rest.yaml.ESClientYamlSuiteTestCase",
3333
"org.elasticsearch.test.AbstractMultiClustersTestCase"
3434
)
35-
repository.generateJar('org.junit', 'junit', "4.42",
35+
repository.generateJar('junit', 'junit', "4.42",
3636
"org.junit.Assert", "org.junit.Test"
3737
)
3838
}
@@ -180,7 +180,7 @@ class TestingConventionsPrecommitPluginFuncTest extends AbstractGradleInternalPl
180180
181181
dependencies {
182182
yamlRestTestImplementation "org.apache.lucene:tests.util:1.0"
183-
yamlRestTestImplementation "org.junit:junit:4.42"
183+
yamlRestTestImplementation "junit:junit:4.42"
184184
}
185185
"""
186186

@@ -222,7 +222,7 @@ class TestingConventionsPrecommitPluginFuncTest extends AbstractGradleInternalPl
222222
223223
dependencies {
224224
${sourceSetName}Implementation "org.apache.lucene:tests.util:1.0"
225-
${sourceSetName}Implementation "org.junit:junit:4.42"
225+
${sourceSetName}Implementation "junit:junit:4.42"
226226
}
227227
tasks.withType(TestingConventionsCheckTask).configureEach {
228228
suffix 'IT'
@@ -243,7 +243,7 @@ class TestingConventionsPrecommitPluginFuncTest extends AbstractGradleInternalPl
243243
}
244244

245245
when:
246-
def result = gradleRunner("testingConventions").buildAndFail()
246+
def result = gradleRunner(taskName).buildAndFail()
247247
then:
248248
result.task(taskName).outcome == TaskOutcome.FAILED
249249
assertOutputContains(result.getOutput(), """\
@@ -266,7 +266,7 @@ class TestingConventionsPrecommitPluginFuncTest extends AbstractGradleInternalPl
266266
267267
dependencies {
268268
testImplementation "org.apache.lucene:tests.util:1.0"
269-
testImplementation "org.junit:junit:4.42"
269+
testImplementation "junit:junit:4.42"
270270
}
271271
"""
272272
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaBasePlugin.java

+19-5
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@
2121
import org.gradle.api.Plugin;
2222
import org.gradle.api.Project;
2323
import org.gradle.api.artifacts.Configuration;
24+
import org.gradle.api.artifacts.ExternalModuleDependency;
2425
import org.gradle.api.artifacts.ResolutionStrategy;
2526
import org.gradle.api.file.FileCollection;
26-
import org.gradle.api.plugins.JavaBasePlugin;
2727
import org.gradle.api.plugins.JavaPluginExtension;
28+
import org.gradle.api.plugins.JvmTestSuitePlugin;
29+
import org.gradle.api.plugins.jvm.JvmTestSuite;
2830
import org.gradle.api.provider.Provider;
2931
import org.gradle.api.tasks.SourceSet;
3032
import org.gradle.api.tasks.SourceSetContainer;
@@ -35,6 +37,7 @@
3537
import org.gradle.api.tasks.testing.Test;
3638
import org.gradle.jvm.toolchain.JavaLanguageVersion;
3739
import org.gradle.jvm.toolchain.JavaToolchainService;
40+
import org.gradle.testing.base.TestingExtension;
3841

3942
import java.util.List;
4043
import java.util.Map;
@@ -61,7 +64,18 @@ public void apply(Project project) {
6164
// make sure the global build info plugin is applied to the root project
6265
project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class);
6366
buildParams = project.getRootProject().getExtensions().getByType(BuildParameterExtension.class);
64-
project.getPluginManager().apply(JavaBasePlugin.class);
67+
project.getPluginManager().apply(JvmTestSuitePlugin.class);
68+
TestingExtension testing = project.getExtensions().getByType(TestingExtension.class);
69+
testing.getSuites().withType(JvmTestSuite.class).configureEach(suite -> {
70+
if (suite.getName().equals("test") == false) {
71+
// default test task behaves differently in gradle
72+
suite.useJUnit();
73+
}
74+
ExternalModuleDependency junitDependency = suite.getDependencies()
75+
.module("junit", "junit", VersionProperties.getVersions().get("junit"));
76+
junitDependency.setTransitive(false);
77+
suite.getDependencies().getImplementation().add(junitDependency);
78+
});
6579
// common repositories setup
6680
project.getPluginManager().apply(RepositoriesSetupPlugin.class);
6781
project.getPluginManager().apply(ElasticsearchTestBasePlugin.class);
@@ -99,7 +113,7 @@ public static void configureConfigurations(Project project) {
99113
return;
100114
}
101115
// fail on any conflicting dependency versions
102-
project.getConfigurations().all(configuration -> {
116+
project.getConfigurations().configureEach(configuration -> {
103117
if (configuration.getName().endsWith("Fixture")) {
104118
// just a self contained test-fixture configuration, likely transitive and hellacious
105119
return;
@@ -109,17 +123,17 @@ public static void configureConfigurations(Project project) {
109123

110124
// disable transitive dependency management
111125
SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
112-
sourceSets.all(sourceSet -> disableTransitiveDependenciesForSourceSet(project, sourceSet));
126+
sourceSets.configureEach(sourceSet -> disableTransitiveDependenciesForSourceSet(project, sourceSet));
113127
}
114128

115129
private static void disableTransitiveDependenciesForSourceSet(Project project, SourceSet sourceSet) {
130+
116131
List<String> sourceSetConfigurationNames = List.of(
117132
sourceSet.getApiConfigurationName(),
118133
sourceSet.getImplementationConfigurationName(),
119134
sourceSet.getCompileOnlyConfigurationName(),
120135
sourceSet.getRuntimeOnlyConfigurationName()
121136
);
122-
123137
project.getConfigurations()
124138
.matching(c -> sourceSetConfigurationNames.contains(c.getName()))
125139
.configureEach(GradleUtils::disableTransitiveDependencies);

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavadocPlugin.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import org.gradle.api.Project;
1717
import org.gradle.api.Task;
1818
import org.gradle.api.artifacts.Configuration;
19-
import org.gradle.api.artifacts.Dependency;
2019
import org.gradle.api.artifacts.ProjectDependency;
2120
import org.gradle.api.plugins.BasePluginExtension;
2221
import org.gradle.api.plugins.JavaPlugin;
@@ -25,7 +24,6 @@
2524
import org.gradle.external.javadoc.StandardJavadocDocletOptions;
2625

2726
import java.io.File;
28-
import java.util.Comparator;
2927
import java.util.List;
3028

3129
// Handle javadoc dependencies across projects. Order matters: the linksOffline for
@@ -77,12 +75,11 @@ public void execute(Task task) {
7775
}
7876

7977
private void configureJavadocForConfiguration(Project project, boolean shadow, Configuration configuration) {
80-
configuration.getAllDependencies()
81-
.stream()
82-
.sorted(Comparator.comparing(Dependency::getGroup))
83-
.filter(d -> d instanceof ProjectDependency)
84-
.map(d -> (ProjectDependency) d)
85-
.forEach(projectDependency -> configureDependency(project, shadow, projectDependency));
78+
configuration.getAllDependencies().configureEach(dependency -> {
79+
if (dependency instanceof ProjectDependency) {
80+
configureDependency(project, shadow, (ProjectDependency) dependency);
81+
}
82+
});
8683
}
8784

8885
private void configureDependency(Project project, boolean shadowed, ProjectDependency dep) {

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactPlugin.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class InternalTestArtifactPlugin implements Plugin<Project> {
2424
public void apply(Project project) {
2525
project.getPlugins().apply(InternalTestArtifactBasePlugin.class);
2626
InternalTestArtifactExtension testArtifactExtension = project.getExtensions().getByType(InternalTestArtifactExtension.class);
27-
project.getExtensions().getByType(SourceSetContainer.class).all(sourceSet -> {
27+
project.getExtensions().getByType(SourceSetContainer.class).configureEach(sourceSet -> {
2828
if (sourceSet.getName().equals(SourceSet.MAIN_SOURCE_SET_NAME) == false) {
2929
testArtifactExtension.registerTestArtifactFromSourceSet(sourceSet);
3030
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public void execute(Task task) {
115115
JavaBasePlugin.class,
116116
javaBasePlugin -> project.getExtensions()
117117
.getByType(SourceSetContainer.class)
118-
.all(
118+
.configureEach(
119119
sourceSet -> project.getTasks()
120120
.withType(Checkstyle.class)
121121
.named(sourceSet.getTaskName("checkstyle", null))

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java

+4-14
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
import org.gradle.api.provider.ProviderFactory;
1717
import org.gradle.api.tasks.TaskProvider;
1818

19-
import java.util.stream.Collectors;
20-
2119
import javax.inject.Inject;
2220

2321
public class FilePermissionsPrecommitPlugin extends PrecommitPlugin {
@@ -33,18 +31,10 @@ public FilePermissionsPrecommitPlugin(ProviderFactory providerFactory) {
3331
@Override
3432
public TaskProvider<? extends Task> createTask(Project project) {
3533
return project.getTasks().register(FILEPERMISSIONS_TASK_NAME, FilePermissionsTask.class, t -> {
36-
t.getSources()
37-
.addAll(
38-
providerFactory.provider(
39-
() -> GradleUtils.getJavaSourceSets(project).stream().map(s -> s.getAllSource()).collect(Collectors.toList())
40-
)
41-
);
42-
t.dependsOn(
43-
GradleUtils.getJavaSourceSets(project)
44-
.stream()
45-
.map(sourceSet -> sourceSet.getProcessResourcesTaskName())
46-
.collect(Collectors.toList())
47-
);
34+
GradleUtils.getJavaSourceSets(project).configureEach(sourceSet -> {
35+
t.getSources().add(sourceSet.getAllSource());
36+
t.dependsOn(sourceSet.getProcessResourcesTaskName());
37+
});
4838
});
4939
}
5040
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java

+4-14
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
import org.gradle.api.provider.ProviderFactory;
1717
import org.gradle.api.tasks.TaskProvider;
1818

19-
import java.util.stream.Collectors;
20-
2119
import javax.inject.Inject;
2220

2321
public class ForbiddenPatternsPrecommitPlugin extends PrecommitPlugin {
@@ -33,18 +31,10 @@ public ForbiddenPatternsPrecommitPlugin(ProviderFactory providerFactory) {
3331
@Override
3432
public TaskProvider<? extends Task> createTask(Project project) {
3533
return project.getTasks().register(FORBIDDEN_PATTERNS_TASK_NAME, ForbiddenPatternsTask.class, forbiddenPatternsTask -> {
36-
forbiddenPatternsTask.getSourceFolders()
37-
.addAll(
38-
providerFactory.provider(
39-
() -> GradleUtils.getJavaSourceSets(project).stream().map(s -> s.getAllSource()).collect(Collectors.toList())
40-
)
41-
);
42-
forbiddenPatternsTask.dependsOn(
43-
GradleUtils.getJavaSourceSets(project)
44-
.stream()
45-
.map(sourceSet -> sourceSet.getProcessResourcesTaskName())
46-
.collect(Collectors.toList())
47-
);
34+
GradleUtils.getJavaSourceSets(project).configureEach(sourceSet -> {
35+
forbiddenPatternsTask.getSourceFolders().add(sourceSet.getAllSource());
36+
forbiddenPatternsTask.dependsOn(sourceSet.getProcessResourcesTaskName());
37+
});
4838
forbiddenPatternsTask.getRootDir().set(project.getRootDir());
4939
});
5040
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/JavaModulePrecommitPlugin.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@ public class JavaModulePrecommitPlugin extends PrecommitPlugin {
2525
public TaskProvider<? extends Task> createTask(Project project) {
2626
TaskProvider<JavaModulePrecommitTask> task = project.getTasks().register(TASK_NAME, JavaModulePrecommitTask.class);
2727
task.configure(t -> {
28-
SourceSet mainSourceSet = GradleUtils.getJavaSourceSets(project).findByName(SourceSet.MAIN_SOURCE_SET_NAME);
29-
t.dependsOn(mainSourceSet.getClassesTaskName());
30-
t.getSrcDirs().set(project.provider(() -> mainSourceSet.getAllSource().getSrcDirs()));
31-
t.setClasspath(project.getConfigurations().getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME));
32-
t.setClassesDirs(mainSourceSet.getOutput().getClassesDirs());
33-
t.setResourcesDirs(mainSourceSet.getOutput().getResourcesDir());
28+
GradleUtils.getJavaSourceSets(project).named(SourceSet.MAIN_SOURCE_SET_NAME).configure(sourceSet -> {
29+
t.dependsOn(sourceSet.getClassesTaskName());
30+
t.getSrcDirs().set(project.provider(() -> sourceSet.getAllSource().getSrcDirs()));
31+
t.setClasspath(project.getConfigurations().getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME));
32+
t.setClassesDirs(sourceSet.getOutput().getClassesDirs());
33+
t.setResourcesDirs(sourceSet.getOutput().getResourcesDir());
34+
});
3435
});
3536
return task;
3637
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public TaskProvider<? extends Task> createTask(Project project) {
3333
sourceSets.matching(
3434
sourceSet -> sourceSet.getName().equals(SourceSet.MAIN_SOURCE_SET_NAME)
3535
|| sourceSet.getName().equals(SourceSet.TEST_SOURCE_SET_NAME)
36-
).all(sourceSet -> loggerUsage.configure(t -> t.addSourceSet(sourceSet)));
36+
).configureEach(sourceSet -> loggerUsage.configure(t -> t.addSourceSet(sourceSet)));
3737

3838
loggerUsage.configure(
3939
t -> t.setClasspath(loggerUsageConfig)

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/SplitPackagesAuditPrecommitPlugin.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ public TaskProvider<? extends Task> createTask(Project project) {
3030
task.configure(t -> {
3131
t.setProjectBuildDirs(getProjectBuildDirs(project));
3232
t.setClasspath(project.getConfigurations().getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME));
33-
SourceSet mainSourceSet = GradleUtils.getJavaSourceSets(project).findByName(SourceSet.MAIN_SOURCE_SET_NAME);
34-
t.dependsOn(mainSourceSet.getJava().getSourceDirectories());
35-
t.getSrcDirs().set(project.provider(() -> mainSourceSet.getAllSource().getSrcDirs()));
33+
GradleUtils.getJavaSourceSets(project).named(SourceSet.MAIN_SOURCE_SET_NAME).configure(sourceSet -> {
34+
t.dependsOn(sourceSet.getJava().getSourceDirectories());
35+
t.getSrcDirs().set(project.provider(() -> sourceSet.getAllSource().getSrcDirs()));
36+
});
37+
3638
});
3739
return task;
3840
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/InternalClusterTestPlugin.java

+18-17
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111

1212
import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin;
1313
import org.elasticsearch.gradle.util.GradleUtils;
14-
import org.gradle.api.JavaVersion;
1514
import org.gradle.api.Plugin;
1615
import org.gradle.api.Project;
16+
import org.gradle.api.artifacts.dsl.DependencyCollector;
17+
import org.gradle.api.plugins.JavaPlugin;
18+
import org.gradle.api.plugins.JvmTestSuitePlugin;
19+
import org.gradle.api.plugins.jvm.JvmTestSuite;
1720
import org.gradle.api.tasks.SourceSet;
18-
import org.gradle.api.tasks.TaskProvider;
19-
import org.gradle.api.tasks.testing.Test;
20-
21-
import static org.elasticsearch.gradle.internal.util.ParamsUtils.loadBuildParams;
21+
import org.gradle.testing.base.TestingExtension;
2222

2323
public class InternalClusterTestPlugin implements Plugin<Project> {
2424

@@ -27,19 +27,20 @@ public class InternalClusterTestPlugin implements Plugin<Project> {
2727
@Override
2828
public void apply(Project project) {
2929
project.getRootProject().getPlugins().apply(GlobalBuildInfoPlugin.class);
30-
var buildParams = loadBuildParams(project).get();
31-
32-
TaskProvider<Test> internalClusterTest = GradleUtils.addTestSourceSet(project, SOURCE_SET_NAME);
33-
internalClusterTest.configure(task -> {
34-
// Set GC options to mirror defaults in jvm.options
35-
if (buildParams.getRuntimeJavaVersion().get().compareTo(JavaVersion.VERSION_14) < 0) {
36-
task.jvmArgs("-XX:+UseConcMarkSweepGC", "-XX:CMSInitiatingOccupancyFraction=75", "-XX:+UseCMSInitiatingOccupancyOnly");
37-
} else {
38-
task.jvmArgs("-XX:+UseG1GC");
39-
}
30+
project.getPluginManager().apply(JavaPlugin.class);
31+
project.getPluginManager().apply(JvmTestSuitePlugin.class);
32+
TestingExtension testing = project.getExtensions().getByType(TestingExtension.class);
33+
34+
testing.getSuites().register(SOURCE_SET_NAME, JvmTestSuite.class, suite -> {
35+
suite.useJUnit();
36+
DependencyCollector implementation = suite.getDependencies().getImplementation();
37+
implementation.add(suite.getDependencies().project());
38+
suite.getTargets().configureEach(target -> { target.getTestTask().configure(test -> { test.jvmArgs("-XX:+UseG1GC"); }); });
4039
});
4140

42-
// TODO: fix usages of IT tests depending on Tests methods so this extension is not necessary
43-
GradleUtils.extendSourceSet(project, SourceSet.TEST_SOURCE_SET_NAME, SOURCE_SET_NAME);
41+
project.getPluginManager().withPlugin("java", plugin -> {
42+
// TODO: fix usages of IT tests depending on Tests methods so this extension is not necessary
43+
GradleUtils.extendSourceSet(project, SourceSet.TEST_SOURCE_SET_NAME, SOURCE_SET_NAME);
44+
});
4445
}
4546
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/TestWithDependenciesPlugin.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void apply(final Project project) {
4747
}
4848

4949
Configuration testImplementationConfig = project.getConfigurations().getByName("testImplementation");
50-
testImplementationConfig.getDependencies().all(dep -> {
50+
testImplementationConfig.getDependencies().configureEach(dep -> {
5151
if (dep instanceof ProjectDependency && dep.getGroup().contains("plugin")) {
5252
addPluginResources(project, ((ProjectDependency) dep));
5353
}

0 commit comments

Comments
 (0)