6262import org .apache .maven .api .model .Plugin ;
6363import org .apache .maven .api .model .Profile ;
6464import org .apache .maven .api .model .ReportPlugin ;
65- import org .apache .maven .api .model .Resource ;
6665import org .apache .maven .api .services .ArtifactResolver ;
6766import org .apache .maven .api .services .ArtifactResolverException ;
6867import org .apache .maven .api .services .ArtifactResolverRequest ;
@@ -720,16 +719,11 @@ private void initProject(MavenProject project, ModelBuilderResult result) {
720719 modules ,
721720 isModularProject );
722721
723- // Handle main and test resources using shared method
724- ResourceHandlingContext context =
722+ // Handle main and test resources
723+ ResourceHandlingContext resourceContext =
725724 new ResourceHandlingContext (project , baseDir , modules , isModularProject , result );
726- handleResourceConfiguration (
727- context , project .getBuild ().getDelegate ().getResources (), hasMainResources , ProjectScope .MAIN );
728- handleResourceConfiguration (
729- context ,
730- project .getBuild ().getDelegate ().getTestResources (),
731- hasTestResources ,
732- ProjectScope .TEST );
725+ resourceContext .handleResourceConfiguration (ProjectScope .MAIN , hasMainResources );
726+ resourceContext .handleResourceConfiguration (ProjectScope .TEST , hasTestResources );
733727 }
734728
735729 project .setActiveProfiles (
@@ -1123,114 +1117,6 @@ public Set<Entry<K, V>> entrySet() {
11231117 }
11241118 }
11251119
1126- /**
1127- * Context object for resource handling configuration.
1128- * Groups parameters shared between main and test resource handling to reduce method parameter count.
1129- */
1130- private record ResourceHandlingContext (
1131- MavenProject project ,
1132- Path baseDir ,
1133- Set <String > modules ,
1134- boolean modularProject ,
1135- ModelBuilderResult result ) {}
1136-
1137- /**
1138- * Handles resource configuration for a given scope (main or test).
1139- * This method applies the resource priority rules:
1140- * <ol>
1141- * <li>Modular project: use resources from {@code <sources>} if present, otherwise inject defaults</li>
1142- * <li>Classic project: use resources from {@code <sources>} if present, otherwise use legacy resources</li>
1143- * </ol>
1144- *
1145- * @param context the resource handling context containing project info
1146- * @param resources the legacy resource list (from {@code <resources>} or {@code <testResources>})
1147- * @param hasResourcesInSources whether resources are configured via {@code <sources>}
1148- * @param scope the project scope (MAIN or TEST)
1149- */
1150- private void handleResourceConfiguration (
1151- ResourceHandlingContext context ,
1152- List <Resource > resources ,
1153- boolean hasResourcesInSources ,
1154- ProjectScope scope ) {
1155-
1156- String scopeId = scope .id ();
1157- String scopeName = scope == ProjectScope .MAIN ? "Main" : "Test" ;
1158- String legacyElement = scope == ProjectScope .MAIN ? "<resources>" : "<testResources>" ;
1159- String sourcesConfig = scope == ProjectScope .MAIN
1160- ? "<source><lang>resources</lang></source>"
1161- : "<source><lang>resources</lang><scope>test</scope></source>" ;
1162-
1163- if (context .modularProject ()) {
1164- if (hasResourcesInSources ) {
1165- // Modular project with resources configured via <sources> - already added above
1166- if (hasExplicitLegacyResources (resources , context .baseDir (), scopeId )) {
1167- logger .warn (
1168- "Legacy {} element is ignored because {} resources are configured via {} in <sources>." ,
1169- legacyElement ,
1170- scopeId ,
1171- sourcesConfig );
1172- } else {
1173- logger .trace (
1174- "{} resources configured via <sources> element, ignoring legacy {} element." ,
1175- scopeName ,
1176- legacyElement );
1177- }
1178- } else {
1179- // Modular project without resources in <sources> - inject module-aware defaults
1180- if (hasExplicitLegacyResources (resources , context .baseDir (), scopeId )) {
1181- String message = "Legacy " + legacyElement
1182- + " element is ignored because modular sources are configured. "
1183- + "Use " + sourcesConfig + " in <sources> for custom resource paths." ;
1184- logger .warn (message );
1185- context .result ()
1186- .getProblemCollector ()
1187- .reportProblem (new org .apache .maven .impl .model .DefaultModelProblem (
1188- message ,
1189- Severity .WARNING ,
1190- Version .V41 ,
1191- context .project ().getModel ().getDelegate (),
1192- -1 ,
1193- -1 ,
1194- null ));
1195- }
1196- for (String module : context .modules ()) {
1197- context .project ().addSourceRoot (createModularResourceRoot (context .baseDir (), module , scope ));
1198- }
1199- if (!context .modules ().isEmpty ()) {
1200- logger .trace (
1201- "Injected {} module-aware {} resource root(s) for modules: {}." ,
1202- context .modules ().size (),
1203- scopeId ,
1204- context .modules ());
1205- }
1206- }
1207- } else {
1208- // Classic (non-modular) project
1209- if (hasResourcesInSources ) {
1210- // Resources configured via <sources> - already added above
1211- if (hasExplicitLegacyResources (resources , context .baseDir (), scopeId )) {
1212- logger .warn (
1213- "Legacy {} element is ignored because {} resources are configured via {} in <sources>." ,
1214- legacyElement ,
1215- scopeId ,
1216- sourcesConfig );
1217- } else {
1218- logger .trace (
1219- "{} resources configured via <sources> element, ignoring legacy {} element." ,
1220- scopeName ,
1221- legacyElement );
1222- }
1223- } else {
1224- // Use legacy resources element
1225- logger .trace (
1226- "Using explicit or default {} resources ({} resources configured)." , scopeId , resources .size ());
1227- for (Resource resource : resources ) {
1228- context .project ().addSourceRoot (new DefaultSourceRoot (context .baseDir (), scope , resource ));
1229- }
1230- }
1231- }
1232- }
1233-
12341120 /**
12351121 * Extracts unique module names from the given list of source elements.
12361122 * A project is considered modular if it has at least one module name.
@@ -1247,67 +1133,6 @@ private static Set<String> extractModules(List<org.apache.maven.api.model.Source
12471133 .collect (Collectors .toSet ());
12481134 }
12491135
1250- /**
1251- * Creates a DefaultSourceRoot for module-aware resource directories.
1252- * Generates paths following the pattern: {@code src/<module>/<scope>/resources}
1253- *
1254- * @param baseDir base directory of the project
1255- * @param module module name
1256- * @param scope project scope (main or test)
1257- * @return configured DefaultSourceRoot for the module's resources
1258- */
1259- private static DefaultSourceRoot createModularResourceRoot (Path baseDir , String module , ProjectScope scope ) {
1260- Path resourceDir =
1261- baseDir .resolve ("src" ).resolve (module ).resolve (scope .id ()).resolve ("resources" );
1262-
1263- return new DefaultSourceRoot (
1264- scope ,
1265- Language .RESOURCES ,
1266- module ,
1267- null , // targetVersion
1268- resourceDir ,
1269- null , // includes
1270- null , // excludes
1271- false , // stringFiltering
1272- Path .of (module ), // targetPath - resources go to target/classes/<module>
1273- true // enabled
1274- );
1275- }
1276-
1277- /**
1278- * Checks if the given resource list contains explicit legacy resources that differ
1279- * from Super POM defaults. Super POM defaults are: src/{scope}/resources and src/{scope}/resources-filtered
1280- *
1281- * @param resources list of resources to check
1282- * @param baseDir project base directory
1283- * @param scope scope (main or test)
1284- * @return true if explicit legacy resources are present that would be ignored
1285- */
1286- private static boolean hasExplicitLegacyResources (List <Resource > resources , Path baseDir , String scope ) {
1287- if (resources .isEmpty ()) {
1288- return false ; // No resources means no explicit legacy resources to warn about
1289- }
1290-
1291- // Super POM default paths
1292- String defaultPath =
1293- baseDir .resolve ("src" ).resolve (scope ).resolve ("resources" ).toString ();
1294- String defaultFilteredPath = baseDir .resolve ("src" )
1295- .resolve (scope )
1296- .resolve ("resources-filtered" )
1297- .toString ();
1298-
1299- // Check if any resource differs from Super POM defaults
1300- for (Resource resource : resources ) {
1301- String resourceDir = resource .getDirectory ();
1302- if (resourceDir != null && !resourceDir .equals (defaultPath ) && !resourceDir .equals (defaultFilteredPath )) {
1303- // Found an explicit legacy resource
1304- return true ;
1305- }
1306- }
1307-
1308- return false ;
1309- }
1310-
13111136 private Model injectLifecycleBindings (
13121137 Model model ,
13131138 ModelBuilderRequest request ,
0 commit comments