11package org .hypertrace .gradle .dependency ;
22
3+ import java .util .ArrayList ;
4+ import java .util .List ;
5+ import java .util .Optional ;
36import org .gradle .api .GradleException ;
47import org .gradle .api .Plugin ;
58import org .gradle .api .Project ;
1316import org .gradle .api .initialization .dsl .VersionCatalogBuilder ;
1417import org .gradle .api .plugins .JavaPlugin ;
1518import org .gradle .api .provider .Provider ;
19+ import org .gradle .api .tasks .SourceSetContainer ;
1620import org .jetbrains .annotations .NotNull ;
1721
18- import java .util .Optional ;
19-
2022public class HypertraceDependencySettingsPlugin implements Plugin <Settings > {
2123 private static final String HYPERTRACE_REPOSITORY_URL =
2224 "https://hypertrace.jfrog.io/artifactory/maven" ;
2325 private static final String CONFLUENT_REPOSITORY_URL = "https://packages.confluent.io/maven" ;
26+ private static final List <String > DEFAULT_LOCKED_CONFIGURATIONS =
27+ List .of (
28+ JavaPlugin .ANNOTATION_PROCESSOR_CONFIGURATION_NAME ,
29+ JavaPlugin .COMPILE_CLASSPATH_CONFIGURATION_NAME ,
30+ JavaPlugin .RUNTIME_CLASSPATH_CONFIGURATION_NAME ,
31+ JavaPlugin .TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME ,
32+ JavaPlugin .TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME );
2433
2534 @ Override
2635 public void apply (@ NotNull Settings settings ) {
@@ -45,6 +54,7 @@ public void apply(@NotNull Settings settings) {
4554 unused -> {
4655 DependencyPluginProjectExtension projectExtension =
4756 this .addProjectExtension (project );
57+ this .assignDefaultConfigurationsToLock (project , projectExtension );
4858 this .addBomDependencyIfRequested (
4959 project , settingExtension , projectExtension );
5060 if (settingExtension .useDependencyLocking .get ()) {
@@ -230,6 +240,31 @@ private void addDependencyLocking(
230240 }));
231241 }
232242
243+ private void assignDefaultConfigurationsToLock (
244+ Project targetProject , DependencyPluginProjectExtension extension ) {
245+ // Default to this list
246+ extension .configurationsToLock .convention (DEFAULT_LOCKED_CONFIGURATIONS );
247+ // But if an integration test plugin is applied (now or later) reassign the default
248+ targetProject
249+ .getPluginManager ()
250+ .withPlugin (
251+ "org.hypertrace.integration-test-plugin" ,
252+ plugin -> {
253+ targetProject
254+ .getExtensions ()
255+ .getByType (SourceSetContainer .class )
256+ .named (
257+ "integrationTest" ,
258+ sourceSet -> {
259+ List <String > configurationsToLock =
260+ new ArrayList <>(DEFAULT_LOCKED_CONFIGURATIONS );
261+ configurationsToLock .add (sourceSet .getCompileClasspathConfigurationName ());
262+ configurationsToLock .add (sourceSet .getRuntimeClasspathConfigurationName ());
263+ extension .configurationsToLock .convention (configurationsToLock );
264+ });
265+ });
266+ }
267+
233268 /**
234269 * Adds a task to the target project that resolves all configurations that we've enabled for
235270 * locking for. In conjunction with the --write-locks flag, this allows an easy way to update the
0 commit comments