actually I rolled back my workaround files must not be locked, test is right and code needs to be fixed
On 10/19/07, Carlos Sanchez <[EMAIL PROTECTED]> wrote: > that won't help either, you are not checking the return value of > renameTo that obviously fails as delete does > I have made the test ignore the error deleting so i can build but > there's an underlying problem that the files are locked after the > container is disposed. > > On 10/19/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > > Author: jdcasey > > Date: Fri Oct 19 10:13:20 2007 > > New Revision: 586543 > > > > URL: http://svn.apache.org/viewvc?rev=586543&view=rev > > Log: > > some documentation for new extension and project-level session stuff, and > > trying a fix for the extension manager test that may help things on windows > > where forceDelete(..) fails. > > > > Modified: > > > > maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenProjectSession.java > > > > maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java > > > > maven/components/trunk/maven-core/src/test/java/org/apache/maven/extension/DefaultExtensionManagerTest.java > > > > Modified: > > maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenProjectSession.java > > URL: > > http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenProjectSession.java?rev=586543&r1=586542&r2=586543&view=diff > > ============================================================================== > > --- > > maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenProjectSession.java > > (original) > > +++ > > maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenProjectSession.java > > Fri Oct 19 10:13:20 2007 > > @@ -14,6 +14,26 @@ > > import java.util.HashMap; > > import java.util.Map; > > > > +/** > > + * Project-level session that stores extension and plugin realms for the > > project > > + * with the specified projectId (groupId, artifactId, and version). The > > projectId > > + * is the key here, not the project instance, since this session may be > > constructed > > + * before the MavenProject instance has been created, in order to pre-scan > > for > > + * extensions that may alter the project instance when it is constructed > > (using > > + * custom profile activators, for instance). > > + * > > + * The [EMAIL PROTECTED] MavenProjectSession#getProjectRealm()} method is > > used in many cases > > + * as the lookup realm when the project associated with this session is > > active, > > + * as in the lifecycle executor. In other cases, where a plugin itself is > > being > > + * executed, the [EMAIL PROTECTED] > > MavenProjectSession#getPluginRealm(Plugin)} and > > + * [EMAIL PROTECTED] MavenProjectSession#getPluginRealm(PluginDescriptor)} > > methods allow for > > + * retrieval of the [EMAIL PROTECTED] ClassRealm} instance - linked to > > this project - which > > + * contains the plugin classes...in these cases, the plugin realm is used > > as > > + * the lookupRealm. > > + * > > + * @author jdcasey > > + * > > + */ > > public class MavenProjectSession > > { > > > > @@ -50,7 +70,7 @@ > > return componentRealms.containsKey( id ); > > } > > > > - public boolean containsRealm( Plugin plugin ) > > + public boolean containsPluginRealm( Plugin plugin ) > > { > > String realmId = createPluginRealmId( > > ArtifactUtils.versionlessKey( plugin.getGroupId(), plugin.getArtifactId() ) > > ); > > > > @@ -62,6 +82,17 @@ > > return projectRealm; > > } > > > > + /** > > + * Creates a new ClassRealm for the given extension artifact. This > > realm > > + * will be a child realm of the container passed to this instance in > > the > > + * constructor, and does not inherit from the project realm. This is > > important, > > + * since the project realm will eventually import certain extension > > + * component classes from the realm resulting from this call. > > + * > > + * @param extensionArtifact > > + * @return > > + * @throws DuplicateRealmException > > + */ > > public ClassRealm createExtensionRealm( Artifact extensionArtifact ) > > throws DuplicateRealmException > > { > > @@ -73,6 +104,16 @@ > > return extRealm; > > } > > > > + /** > > + * Create a projectId for use in the [EMAIL PROTECTED] > > MavenProjectSession} constructor > > + * and lookup (from inside [EMAIL PROTECTED] MavenSession} currently). > > This method provides > > + * a standard way of forming that id. > > + * > > + * @param groupId > > + * @param artifactId > > + * @param version > > + * @return > > + */ > > public static String createProjectId( String groupId, > > String artifactId, > > String version ) > > > > Modified: > > maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java > > URL: > > http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java?rev=586543&r1=586542&r2=586543&view=diff > > ============================================================================== > > --- > > maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java > > (original) > > +++ > > maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java > > Fri Oct 19 10:13:20 2007 > > @@ -188,6 +188,10 @@ > > { > > getLogger().debug( "Starting extension-addition process for: " + > > extensionArtifact ); > > > > + // create a new MavenProjectSession instance for the current > > project. > > + // This session instance will house the plugin and extension > > realms that > > + // pertain to this specific project, along with containing the > > project-level > > + // realm to use as a lookupRealm in the lifecycle executor and > > plugin manager. > > MavenProjectSession projectSession = (MavenProjectSession) > > projectSessions.get( projectId ); > > if ( projectSession == null ) > > { > > @@ -288,6 +292,9 @@ > > { > > String projectId = projectSession.getProjectId(); > > > > + // Create an entire new ClassWorld, ClassRealm for discovering > > + // the immediate components of the extension artifact, so we don't > > pollute the > > + // container with component descriptors or realms that don't have > > any meaning beyond discovery. > > ClassRealm discoveryRealm = new ClassRealm( new ClassWorld(), > > "discovery", Thread.currentThread().getContextClassLoader() ); > > try > > { > > @@ -304,12 +311,16 @@ > > ClassRealm projectRealm = projectSession.getProjectRealm(); > > try > > { > > + // Find the extension component descriptors that exist ONLY in > > the immediate extension > > + // artifact...this prevents us from adding plexus-archiver > > components to the mix, for instance, > > + // when the extension uses that dependency. > > List componentSetDescriptors = discoverer.findComponents( > > container.getContext(), discoveryRealm ); > > for ( Iterator it = componentSetDescriptors.iterator(); > > it.hasNext(); ) > > { > > ComponentSetDescriptor compSet = (ComponentSetDescriptor) > > it.next(); > > for ( Iterator compIt = > > compSet.getComponents().iterator(); compIt.hasNext(); ) > > { > > + // For each component in the extension artifact: > > ComponentDescriptor comp = (ComponentDescriptor) > > compIt.next(); > > String implementation = comp.getImplementation(); > > > > @@ -317,9 +328,19 @@ > > { > > getLogger().debug( "Importing: " + implementation > > + "\nwith role: " + comp.getRole() + "\nand hint: " + comp.getRoleHint() + > > "\nfrom extension realm: " + extensionRealm.getId() + "\nto project realm: > > " + projectRealm.getId() ); > > > > + // Import the extension component's implementation > > class into the project-level > > + // realm. > > projectRealm.importFrom( extensionRealm.getId(), > > implementation ); > > > > + // Set the realmId to be used in looking up this > > extension component to the > > + // project-level realm, since we now have a > > restricted import > > + // that allows most of the extension to stay > > hidden, and the > > + // specific local extension components are still > > accessible > > + // from the project-level realm. > > comp.setRealmId( projectRealm.getId() ); > > + > > + // Finally, add the extension component's > > descriptor (with projectRealm > > + // set as the lookup realm) to the container. > > container.addComponentDescriptor( comp ); > > } > > catch ( NoSuchRealmException e ) > > > > Modified: > > maven/components/trunk/maven-core/src/test/java/org/apache/maven/extension/DefaultExtensionManagerTest.java > > URL: > > http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/extension/DefaultExtensionManagerTest.java?rev=586543&r1=586542&r2=586543&view=diff > > ============================================================================== > > --- > > maven/components/trunk/maven-core/src/test/java/org/apache/maven/extension/DefaultExtensionManagerTest.java > > (original) > > +++ > > maven/components/trunk/maven-core/src/test/java/org/apache/maven/extension/DefaultExtensionManagerTest.java > > Fri Oct 19 10:13:20 2007 > > @@ -81,7 +81,12 @@ > > > > if ( f.exists() ) > > { > > - FileUtils.forceDelete( f ); > > + File f2 = File.createTempFile( "preDeleteRename.", "" ); > > + > > + f2.delete(); > > + f.renameTo( f2 ); > > + > > + FileUtils.forceDelete( f2 ); > > } > > } > > } > > > > > > > > > -- > I could give you my word as a Spaniard. > No good. I've known too many Spaniards. > -- The Princess Bride > -- I could give you my word as a Spaniard. No good. I've known too many Spaniards. -- The Princess Bride --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]