You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2010/08/31 23:49:55 UTC
svn commit: r991347 - in
/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm:
ClassRealmRequest.java DefaultClassRealmManager.java
Author: bentmann
Date: Tue Aug 31 21:49:55 2010
New Revision: 991347
URL: http://svn.apache.org/viewvc?rev=991347&view=rev
Log:
[MNG-4787] Allow class realm manager delegates to alter public part of Maven core realm
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java
Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java?rev=991347&r1=991346&r2=991347&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java Tue Aug 31 21:49:55 2010
@@ -29,9 +29,30 @@ import java.util.List;
public interface ClassRealmRequest
{
+ /**
+ * The type of a class realm.
+ */
enum RealmType
{
- Project, Extension, Plugin,
+ /**
+ * The class realm for the public API of the Maven core.
+ */
+ Core,
+
+ /**
+ * A class realm for a project to aggregates its build extensions.
+ */
+ Project,
+
+ /**
+ * A class realm for a build extension.
+ */
+ Extension,
+
+ /**
+ * A class realm for a plugin.
+ */
+ Plugin,
}
/**
@@ -49,7 +70,7 @@ public interface ClassRealmRequest
ClassLoader getParent();
/**
- * Gets the packages/types to import from the parent realm
+ * Gets the packages/types to import from the parent realm.
*
* @return The modifiable list of packages/types to import from the parent realm, never {@code null}.
*/
Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java?rev=991347&r1=991346&r2=991347&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java Tue Aug 31 21:49:55 2010
@@ -105,8 +105,26 @@ public class DefaultClassRealmManager
if ( mavenRealm == null )
{
mavenRealm = newRealm( "maven.api" );
+
importMavenApi( mavenRealm );
+
mavenRealm.setParentClassLoader( ClassLoader.getSystemClassLoader() );
+
+ List<ClassRealmManagerDelegate> delegates = getDelegates();
+ if ( !delegates.isEmpty() )
+ {
+ List<ClassRealmConstituent> constituents = new ArrayList<ClassRealmConstituent>();
+
+ ClassRealmRequest request =
+ new DefaultClassRealmRequest( RealmType.Core, null, new ArrayList<String>(), constituents );
+
+ for ( ClassRealmManagerDelegate delegate : delegates )
+ {
+ delegate.setupRealm( mavenRealm, request );
+ }
+
+ populateRealm( mavenRealm, constituents );
+ }
}
return mavenRealm;
}
@@ -150,8 +168,6 @@ public class DefaultClassRealmManager
imports = new ArrayList<String>();
}
- ClassRealmRequest request = new DefaultClassRealmRequest( type, parent, imports, constituents );
-
ClassRealm classRealm = newRealm( baseRealmId );
if ( parent != null )
@@ -163,9 +179,15 @@ public class DefaultClassRealmManager
classRealm.setParentRealm( getMavenRealm() );
}
- for ( ClassRealmManagerDelegate delegate : getDelegates() )
+ List<ClassRealmManagerDelegate> delegates = getDelegates();
+ if ( !delegates.isEmpty() )
{
- delegate.setupRealm( classRealm, request );
+ ClassRealmRequest request = new DefaultClassRealmRequest( type, parent, imports, constituents );
+
+ for ( ClassRealmManagerDelegate delegate : delegates )
+ {
+ delegate.setupRealm( classRealm, request );
+ }
}
if ( importXpp3Dom )
@@ -193,35 +215,12 @@ public class DefaultClassRealmManager
}
}
- if ( logger.isDebugEnabled() )
- {
- logger.debug( "Populating class realm " + classRealm.getId() );
- }
-
- for ( ClassRealmConstituent constituent : constituents )
- {
- File file = constituent.getFile();
-
- String id = getId( constituent );
- artifactIds.remove( id );
-
- if ( logger.isDebugEnabled() )
- {
- logger.debug( " Included: " + id );
- }
-
- try
- {
- classRealm.addURL( file.toURI().toURL() );
- }
- catch ( MalformedURLException e )
- {
- // Not going to happen
- }
- }
+ Set<String> includedIds = populateRealm( classRealm, constituents );
if ( logger.isDebugEnabled() )
{
+ artifactIds.removeAll( includedIds );
+
for ( String id : artifactIds )
{
logger.debug( " Excluded: " + id );
@@ -362,8 +361,45 @@ public class DefaultClassRealmManager
}
catch ( ComponentLookupException e )
{
+ logger.error( "Failed to lookup class realm delegates: " + e.getMessage(), e );
+
return Collections.emptyList();
}
}
+ private Set<String> populateRealm( ClassRealm classRealm, List<ClassRealmConstituent> constituents )
+ {
+ Set<String> includedIds = new LinkedHashSet<String>();
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Populating class realm " + classRealm.getId() );
+ }
+
+ for ( ClassRealmConstituent constituent : constituents )
+ {
+ File file = constituent.getFile();
+
+ String id = getId( constituent );
+ includedIds.add( id );
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( " Included: " + id );
+ }
+
+ try
+ {
+ classRealm.addURL( file.toURI().toURL() );
+ }
+ catch ( MalformedURLException e )
+ {
+ // Not going to happen
+ logger.error( e.getMessage(), e );
+ }
+ }
+
+ return includedIds;
+ }
+
}