gnodet commented on a change in pull request #616:
URL: https://github.com/apache/maven/pull/616#discussion_r783019478



##########
File path: 
maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java
##########
@@ -114,14 +123,42 @@ private CoreExtensionEntry createExtension( CoreExtension 
extension, List<Artifa
     {
         String realmId =
             "coreExtension>" + extension.getGroupId() + ":" + 
extension.getArtifactId() + ":" + extension.getVersion();
-        ClassRealm realm = classWorld.newRealm( realmId, null );
-        log.debug( "Populating class realm " + realm.getId() );
-        realm.setParentRealm( parentRealm );
+        final ClassRealm realm = classWorld.newRealm( realmId, null );
+        Set<String> providedArtifacts = Collections.emptySet();
+        String classLoadingStrategy = extension.getClassLoadingStrategy();
+        if ( STRATEGY_PARENT_FIRST.equals( classLoadingStrategy ) )
+        {
+            realm.importFrom( parentRealm, "" );
+        }
+        else if ( STRATEGY_PLUGIN.equals( classLoadingStrategy ) )
+        {
+            coreExports.getExportedPackages().forEach( ( p, cl ) -> 
realm.importFrom( cl, p ) );
+            providedArtifacts = coreExports.getExportedArtifacts();
+        }
+        else if ( STRATEGY_SELF_FIRST.equals( classLoadingStrategy ) )
+        {
+            realm.setParentRealm( parentRealm );
+        }
+        else
+        {
+            throw new IllegalArgumentException( "Unsupported class-loading 
strategy '"
+                    + classLoadingStrategy + "'. Supported values are: " + 
STRATEGY_PARENT_FIRST
+                    + ", " + STRATEGY_PLUGIN + " and " + STRATEGY_SELF_FIRST );
+        }
+        log.debug( "Populating class realm {}", realm.getId() );
         for ( Artifact artifact : artifacts )
         {
-            File file = artifact.getFile();
-            log.debug( "  Included " + file );
-            realm.addURL( file.toURI().toURL() );
+            String id = artifact.getGroupId() + ":" + artifact.getArtifactId();
+            if ( providedArtifacts.contains( id ) )
+            {
+                log.debug( "  Excluded {}", id );
+            }
+            else
+            {
+                File file = artifact.getFile();
+                log.debug( "  Included {}", file );

Review comment:
       > I consider this as an antipattern. Warn is warn, regardless which 
level is enabled. 
   
   I agree.
   
   > I am not really convinced by this. 
   > I would have expected this:
   > 
   > ```
   >                 if ( log.isTraceEnabled() )
   >                 {
   >                     log.trace( "  Included {} located at {}", id, file );
   >                 }
   >                 else
   >                 {
   >                     log.debug( "  Included {}", id );
   >                 }
   > ```
   > 
   > The message remains the same, but the granularity changes.
   
   This exactly contradicts your statement above which is "warn is warn".  
Here, a _debug_ is logged either at _trace_ *or* _debug_ which is really wrong 
to me.
   
   > Why do you I have to enable debug to see more information with the same 
warn level?
   
   Same as here.  The level choosen in the `mvnd` example is _warn_ because 
that's what it is.  The exception stack trace however, is not necessary to 
understand the warning usually.  But in case you need to have more detailed 
information, you raise the log level to debug, and you have more information 
provided.  But that does not mean the _warning_ becomes a _trace_ as you said.
   
   I think we have the exact same use case here.  The fact that an artifact is 
included or excluded is _debug_ level info.  If you need more, in this case the 
exact file location, you can raise the log level, but the semantic about the 
fact that the artifact is included or not does not change, nor should its log 
level.
   
   If we can't agree on that solution, I'd go for the alternative using two 
statements, one at debug and one at trace level.
   ```
   log.debug( "  Included {}", id );
   log.trace( "          ->  {}", file );
   ```
   
   
   
   




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to