Class DefaultClassRealmManager

  • All Implemented Interfaces:
    ClassRealmManager

    @Named
    @Singleton
    public class DefaultClassRealmManager
    extends java.lang.Object
    implements ClassRealmManager
    Manages the class realms used by Maven. Warning: This is an internal utility class that is only public for technical reasons, it is not part of the public API. In particular, this class can be changed or deleted without prior notice.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String API_REALMID  
      private org.codehaus.plexus.classworlds.realm.ClassRealm containerRealm  
      private java.util.List<ClassRealmManagerDelegate> delegates  
      private org.codehaus.plexus.logging.Logger logger  
      private org.codehaus.plexus.classworlds.realm.ClassRealm mavenApiRealm  
      private static java.lang.ClassLoader PARENT_CLASSLOADER
      During normal command line build, ClassWorld is loaded by jvm system classloader, which only includes plexus-classworlds jar and possibly javaagent classes, see https://issues.apache.org/jira/browse/MNG-4747.
      private java.util.Set<java.lang.String> providedArtifacts
      Patterns of artifacts provided by maven core and exported via maven api realm.
      private org.codehaus.plexus.classworlds.ClassWorld world  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void callDelegates​(org.codehaus.plexus.classworlds.realm.ClassRealm classRealm, ClassRealmRequest.RealmType type, java.lang.ClassLoader parent, java.util.List<java.lang.String> parentImports, java.util.Map<java.lang.String,​java.lang.ClassLoader> foreignImports, java.util.List<ClassRealmConstituent> constituents)  
      org.codehaus.plexus.classworlds.realm.ClassRealm createExtensionRealm​(Plugin plugin, java.util.List<org.eclipse.aether.artifact.Artifact> artifacts)
      Creates a new class realm for the specified build extension.
      org.codehaus.plexus.classworlds.realm.ClassRealm createPluginRealm​(Plugin plugin, java.lang.ClassLoader parent, java.util.List<java.lang.String> parentImports, java.util.Map<java.lang.String,​java.lang.ClassLoader> foreignImports, java.util.List<org.eclipse.aether.artifact.Artifact> artifacts)
      Creates a new class realm for the specified plugin.
      org.codehaus.plexus.classworlds.realm.ClassRealm createProjectRealm​(Model model, java.util.List<org.eclipse.aether.artifact.Artifact> artifacts)
      Creates a new class realm for the specified project and its build extensions.
      private org.codehaus.plexus.classworlds.realm.ClassRealm createRealm​(java.lang.String baseRealmId, ClassRealmRequest.RealmType type, java.lang.ClassLoader parent, java.util.List<java.lang.String> parentImports, java.util.Map<java.lang.String,​java.lang.ClassLoader> foreignImports, java.util.List<org.eclipse.aether.artifact.Artifact> artifacts)
      Creates a new class realm with the specified parent and imports.
      org.codehaus.plexus.classworlds.realm.ClassRealm getCoreRealm()
      Gets the class realm hosting the Maven core.
      private java.lang.String getId​(java.lang.ClassLoader classLoader)  
      private static java.lang.String getId​(java.lang.String gid, java.lang.String aid, java.lang.String type, java.lang.String cls, java.lang.String ver)  
      private static java.lang.String getId​(ClassRealmConstituent constituent)  
      private static java.lang.String getId​(org.eclipse.aether.artifact.Artifact artifact)  
      private static java.lang.String getKey​(Model model)  
      private static java.lang.String getKey​(Plugin plugin, boolean extension)  
      org.codehaus.plexus.classworlds.realm.ClassRealm getMavenApiRealm()
      Gets the class realm exposing the Maven API.
      private boolean isProvidedArtifact​(org.eclipse.aether.artifact.Artifact artifact)  
      private org.codehaus.plexus.classworlds.realm.ClassRealm newRealm​(java.lang.String id)  
      private java.util.Set<java.lang.String> populateRealm​(org.codehaus.plexus.classworlds.realm.ClassRealm classRealm, java.util.List<ClassRealmConstituent> constituents)  
      private void wireRealm​(org.codehaus.plexus.classworlds.realm.ClassRealm classRealm, java.util.List<java.lang.String> parentImports, java.util.Map<java.lang.String,​java.lang.ClassLoader> foreignImports)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • PARENT_CLASSLOADER

        private static final java.lang.ClassLoader PARENT_CLASSLOADER
        During normal command line build, ClassWorld is loaded by jvm system classloader, which only includes plexus-classworlds jar and possibly javaagent classes, see https://issues.apache.org/jira/browse/MNG-4747.

        Using ClassWorld to determine plugin/extensions realm parent classloaders gives m2e and integration test harness flexibility to load multiple version of maven into dedicated classloaders without assuming state of jvm system classloader.

      • logger

        private final org.codehaus.plexus.logging.Logger logger
      • world

        private final org.codehaus.plexus.classworlds.ClassWorld world
      • containerRealm

        private final org.codehaus.plexus.classworlds.realm.ClassRealm containerRealm
      • mavenApiRealm

        private final org.codehaus.plexus.classworlds.realm.ClassRealm mavenApiRealm
      • providedArtifacts

        private final java.util.Set<java.lang.String> providedArtifacts
        Patterns of artifacts provided by maven core and exported via maven api realm. These artifacts are filtered from plugin and build extensions realms to avoid presence of duplicate and possibly conflicting classes on classpath.
    • Constructor Detail

      • DefaultClassRealmManager

        @Inject
        public DefaultClassRealmManager​(org.codehaus.plexus.logging.Logger logger,
                                        org.codehaus.plexus.PlexusContainer container,
                                        java.util.List<ClassRealmManagerDelegate> delegates,
                                        CoreExports exports)
    • Method Detail

      • newRealm

        private org.codehaus.plexus.classworlds.realm.ClassRealm newRealm​(java.lang.String id)
      • getMavenApiRealm

        public org.codehaus.plexus.classworlds.realm.ClassRealm getMavenApiRealm()
        Description copied from interface: ClassRealmManager
        Gets the class realm exposing the Maven API. This is basically a restricted view on the Maven core realm.
        Specified by:
        getMavenApiRealm in interface ClassRealmManager
        Returns:
        The class realm exposing the Maven API, never null.
      • createRealm

        private org.codehaus.plexus.classworlds.realm.ClassRealm createRealm​(java.lang.String baseRealmId,
                                                                             ClassRealmRequest.RealmType type,
                                                                             java.lang.ClassLoader parent,
                                                                             java.util.List<java.lang.String> parentImports,
                                                                             java.util.Map<java.lang.String,​java.lang.ClassLoader> foreignImports,
                                                                             java.util.List<org.eclipse.aether.artifact.Artifact> artifacts)
        Creates a new class realm with the specified parent and imports.
        Parameters:
        baseRealmId - The base id to use for the new realm, must not be null.
        type - The type of the class realm, must not be null.
        parent - The parent realm for the new realm, may be null.
        parentImports - The packages/types to import from the parent realm, may be null.
        foreignImports - The packages/types to import from foreign realms, may be null.
        artifacts - The artifacts to add to the realm, may be null. Unresolved artifacts (i.e. with a missing file) will automatically be excluded from the realm.
        Returns:
        The created class realm, never null.
      • getCoreRealm

        public org.codehaus.plexus.classworlds.realm.ClassRealm getCoreRealm()
        Description copied from interface: ClassRealmManager
        Gets the class realm hosting the Maven core.
        Specified by:
        getCoreRealm in interface ClassRealmManager
        Returns:
        The class realm hosting the Maven core, never null.
      • createProjectRealm

        public org.codehaus.plexus.classworlds.realm.ClassRealm createProjectRealm​(Model model,
                                                                                   java.util.List<org.eclipse.aether.artifact.Artifact> artifacts)
        Description copied from interface: ClassRealmManager
        Creates a new class realm for the specified project and its build extensions.
        Specified by:
        createProjectRealm in interface ClassRealmManager
        Parameters:
        model - The model of the project for which to create a realm, must not be null.
        artifacts - The artifacts to add to the class realm, may be null. Unresolved artifacts (i.e. with a missing file) will automatically be excluded from the realm.
        Returns:
        The new project realm, never null.
      • getKey

        private static java.lang.String getKey​(Model model)
      • createExtensionRealm

        public org.codehaus.plexus.classworlds.realm.ClassRealm createExtensionRealm​(Plugin plugin,
                                                                                     java.util.List<org.eclipse.aether.artifact.Artifact> artifacts)
        Description copied from interface: ClassRealmManager
        Creates a new class realm for the specified build extension.
        Specified by:
        createExtensionRealm in interface ClassRealmManager
        Parameters:
        plugin - The extension plugin for which to create a realm, must not be null.
        artifacts - The artifacts to add to the class realm, may be null. Unresolved artifacts (i.e. with a missing file) will automatically be excluded from the realm.
        Returns:
        The new extension realm, never null.
      • isProvidedArtifact

        private boolean isProvidedArtifact​(org.eclipse.aether.artifact.Artifact artifact)
      • createPluginRealm

        public org.codehaus.plexus.classworlds.realm.ClassRealm createPluginRealm​(Plugin plugin,
                                                                                  java.lang.ClassLoader parent,
                                                                                  java.util.List<java.lang.String> parentImports,
                                                                                  java.util.Map<java.lang.String,​java.lang.ClassLoader> foreignImports,
                                                                                  java.util.List<org.eclipse.aether.artifact.Artifact> artifacts)
        Description copied from interface: ClassRealmManager
        Creates a new class realm for the specified plugin.
        Specified by:
        createPluginRealm in interface ClassRealmManager
        Parameters:
        plugin - The plugin for which to create a realm, must not be null.
        parent - The parent realm for the new realm, may be null.
        parentImports - The packages/types to import from the parent realm, may be null.
        foreignImports - The packages/types to import from foreign realms, may be null.
        artifacts - The artifacts to add to the class realm, may be null. Unresolved artifacts (i.e. with a missing file) will automatically be excluded from the realm.
        Returns:
        The new plugin realm, never null.
      • getKey

        private static java.lang.String getKey​(Plugin plugin,
                                               boolean extension)
      • getId

        private static java.lang.String getId​(org.eclipse.aether.artifact.Artifact artifact)
      • getId

        private static java.lang.String getId​(java.lang.String gid,
                                              java.lang.String aid,
                                              java.lang.String type,
                                              java.lang.String cls,
                                              java.lang.String ver)
      • callDelegates

        private void callDelegates​(org.codehaus.plexus.classworlds.realm.ClassRealm classRealm,
                                   ClassRealmRequest.RealmType type,
                                   java.lang.ClassLoader parent,
                                   java.util.List<java.lang.String> parentImports,
                                   java.util.Map<java.lang.String,​java.lang.ClassLoader> foreignImports,
                                   java.util.List<ClassRealmConstituent> constituents)
      • populateRealm

        private java.util.Set<java.lang.String> populateRealm​(org.codehaus.plexus.classworlds.realm.ClassRealm classRealm,
                                                              java.util.List<ClassRealmConstituent> constituents)
      • wireRealm

        private void wireRealm​(org.codehaus.plexus.classworlds.realm.ClassRealm classRealm,
                               java.util.List<java.lang.String> parentImports,
                               java.util.Map<java.lang.String,​java.lang.ClassLoader> foreignImports)
      • getId

        private java.lang.String getId​(java.lang.ClassLoader classLoader)