Package org.apache.maven.classrealm
Class DefaultClassRealmManager
- java.lang.Object
-
- org.apache.maven.classrealm.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
-
Constructor Summary
Constructors Constructor Description DefaultClassRealmManager(org.codehaus.plexus.logging.Logger logger, org.codehaus.plexus.PlexusContainer container, java.util.List<ClassRealmManagerDelegate> delegates, CoreExports exports)
-
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)
-
-
-
Field Detail
-
API_REALMID
public static final java.lang.String API_REALMID
- See Also:
- Constant Field Values
-
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
-
delegates
private final java.util.List<ClassRealmManagerDelegate> delegates
-
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 interfaceClassRealmManager
- 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 benull
.type
- The type of the class realm, must not benull
.parent
- The parent realm for the new realm, may benull
.parentImports
- The packages/types to import from the parent realm, may benull
.foreignImports
- The packages/types to import from foreign realms, may benull
.artifacts
- The artifacts to add to the realm, may benull
. 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 interfaceClassRealmManager
- 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 interfaceClassRealmManager
- Parameters:
model
- The model of the project for which to create a realm, must not benull
.artifacts
- The artifacts to add to the class realm, may benull
. 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 interfaceClassRealmManager
- Parameters:
plugin
- The extension plugin for which to create a realm, must not benull
.artifacts
- The artifacts to add to the class realm, may benull
. 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 interfaceClassRealmManager
- Parameters:
plugin
- The plugin for which to create a realm, must not benull
.parent
- The parent realm for the new realm, may benull
.parentImports
- The packages/types to import from the parent realm, may benull
.foreignImports
- The packages/types to import from foreign realms, may benull
.artifacts
- The artifacts to add to the class realm, may benull
. 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(ClassRealmConstituent constituent)
-
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)
-
-