You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by Carlos Sanchez <ca...@apache.org> on 2007/10/19 20:06:50 UTC

Re: svn commit: r586543 - in /maven/components/trunk/maven-core/src: main/java/org/apache/maven/execution/ main/java/org/apache/maven/extension/ test/java/org/apache/maven/extension/

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, jdcasey@apache.org <jd...@apache.org> 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 {@link 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 {@link MavenProjectSession#getPluginRealm(Plugin)} and
> + * {@link MavenProjectSession#getPluginRealm(PluginDescriptor)} methods allow for
> + * retrieval of the {@link 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 {@link MavenProjectSession} constructor
> +     * and lookup (from inside {@link 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

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: svn commit: r586543 - in /maven/components/trunk/maven-core/src: main/java/org/apache/maven/execution/ main/java/org/apache/maven/extension/ test/java/org/apache/maven/extension/

Posted by Carlos Sanchez <ca...@apache.org>.
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 <ca...@apache.org> 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, jdcasey@apache.org <jd...@apache.org> 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 {@link 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 {@link MavenProjectSession#getPluginRealm(Plugin)} and
> > + * {@link MavenProjectSession#getPluginRealm(PluginDescriptor)} methods allow for
> > + * retrieval of the {@link 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 {@link MavenProjectSession} constructor
> > +     * and lookup (from inside {@link 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: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org