brett       2004/11/05 23:31:13

  Modified:    src/java/org/apache/maven/plugin Tag: MAVEN-1_0-BRANCH
                        PluginManager.java
  Log:
  PR: MAVEN-1471

  handle dependency verification at a point where the project is in a consistent state 
to continue (for multiproject)

  PR: MAVEN-1493

  put back caching of plugins for plugin:install-now

  formatting
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.70.4.57 +119 -84   maven/src/java/org/apache/maven/plugin/PluginManager.java
  
  Index: PluginManager.java
  ===================================================================
  RCS file: /home/cvs/maven/src/java/org/apache/maven/plugin/PluginManager.java,v
  retrieving revision 1.70.4.56
  retrieving revision 1.70.4.57
  diff -u -r1.70.4.56 -r1.70.4.57
  --- PluginManager.java        4 Nov 2004 15:17:57 -0000       1.70.4.56
  +++ PluginManager.java        6 Nov 2004 07:31:13 -0000       1.70.4.57
  @@ -98,7 +98,9 @@
    */
   public class PluginManager extends AbstractMavenComponent
   {
  -    /** Logger */
  +    /**
  +     * Logger
  +     */
       private static final Log log = LogFactory.getLog( PluginManager.class );
   
       /**
  @@ -114,37 +116,59 @@
       /** */
       public static final String BASE_CONTEXT = "maven.goalAttainmentContext";
   
  -    /** The directory where plugin jars reside under Maven's home. */
  +    /**
  +     * The directory where plugin jars reside under Maven's home.
  +     */
       private File pluginsDir;
   
  -    /** The directory where the plugin jars are unpacked to. */
  +    /**
  +     * The directory where the plugin jars are unpacked to.
  +     */
       private File unpackedPluginsDir;
   
  -    /** The directory where the user's plugin jars are installed. */
  +    /**
  +     * The directory where the user's plugin jars are installed.
  +     */
       private File userPluginsDir;
   
  -    /** This contains a map of plugins, keyed by id. */
  +    /**
  +     * This contains a map of plugins, keyed by id.
  +     */
       private final Map pluginHousings = new HashMap();
   
  -    /** This contains a map of plugins, keyed by artifact id. */
  +    /**
  +     * This contains a map of plugins, keyed by artifact id.
  +     */
       private final Map artifactIdToHousingMap = new HashMap();
   
  -    /** Maven session reference. */
  +    /**
  +     * Maven session reference.
  +     */
       private MavenSession mavenSession;
   
  -    /** Plugin cache manager. */
  +    /**
  +     * Plugin cache manager.
  +     */
       private final PluginCacheManager cacheManager = new PluginCacheManager();
   
  -    /** Goal to Plugins mapper. */
  +    /**
  +     * Goal to Plugins mapper.
  +     */
       private GoalToJellyScriptHousingMapper mapper = new 
GoalToJellyScriptHousingMapper();
   
  -    /** Current plugins mapper (transient - includes maven.xml, etc). **/
  +    /**
  +     * Current plugins mapper (transient - includes maven.xml, etc). *
  +     */
       private GoalToJellyScriptHousingMapper transientMapper = mapper;
   
  -    /** Plugins to be popped afterwards. */
  +    /**
  +     * Plugins to be popped afterwards.
  +     */
       private Set delayedPops = new HashSet();
   
  -    /** The current goal attainment base context. */
  +    /**
  +     * The current goal attainment base context.
  +     */
       private MavenJellyContext baseContext;
       private static final String PLUGIN_TEMP_MAP = "PluginManager.PLUGIN_TEMP_MAP";
   
  @@ -162,7 +186,7 @@
       /**
        * Get the list of plugin files.
        */
  -    private Map getPluginFiles( File directory, boolean acceptDirectories ) throws 
MavenException
  +    private Map getPluginFiles( File directory, boolean acceptDirectories )
       {
           File[] files = directory.listFiles();
           if ( files == null )
  @@ -193,7 +217,7 @@
   
       /**
        * Load plugins.
  -     * 
  +     *
        * @throws MavenException when the plugin jars can't be expanded
        */
       private void loadUncachedPlugins( Map pluginFiles ) throws IOException, 
MavenException
  @@ -202,8 +226,8 @@
   
           for ( Iterator i = pluginFiles.keySet().iterator(); i.hasNext(); )
           {
  -            String name = ( String ) i.next();
  -            File pluginDir = ( File ) pluginFiles.get( name );
  +            String name = (String) i.next();
  +            File pluginDir = (File) pluginFiles.get( name );
   
               if ( !isLoaded( name ) )
               {
  @@ -220,8 +244,6 @@
   
       /**
        * Initialize all plugins.
  -     *
  -     * @throws Exception If an error occurs while initializing any plugin.
        */
       public void initialize() throws IOException, MavenException
       {
  @@ -233,10 +255,10 @@
           setPluginsDir( new File( mavenSession.getRootContext().getPluginsDir() ) );
           setUnpackedPluginsDir( new File( 
mavenSession.getRootContext().getUnpackedPluginsDir() ) );
           setUserPluginsDir( new File( 
mavenSession.getRootContext().getUserPluginsDir() ) );
  -        
  +
           if ( !getPluginsDir().isDirectory() ||
  -             ( getPluginsDir().listFiles() != null &&
  -               getPluginsDir().listFiles().length == 0 ) )
  +            ( getPluginsDir().listFiles() != null &&
  +            getPluginsDir().listFiles().length == 0 ) )
           {
               throw new MavenException( "Maven was badly installed. Please reinstall 
it." );
           }
  @@ -254,12 +276,12 @@
   
           Map pluginFiles = getPluginFiles( pluginsDir, true );
           Map userPluginFiles = getPluginFiles( userPluginsDir, false );
  -        
  +
           if ( !userPluginFiles.isEmpty() )
           {
               pluginFiles.putAll( userPluginFiles );
           }
  -        
  +
           Map pluginDirs = expandPluginFiles( pluginFiles );
   
           cacheManager.loadCache( unpackedPluginsDir );
  @@ -271,7 +293,7 @@
               // The following housings are considered loaded - so go through and 
cache them manually
               for ( Iterator i = pluginHousings.values().iterator(); i.hasNext(); )
               {
  -                JellyScriptHousing housing = ( JellyScriptHousing ) i.next();
  +                JellyScriptHousing housing = (JellyScriptHousing) i.next();
                   cacheManager.registerPlugin( housing.getName(), housing );
                   housing.parse( cacheManager );
                   housing.parse( mapper );
  @@ -290,8 +312,8 @@
           Map pluginDirs = new HashMap();
           for ( Iterator i = pluginFiles.keySet().iterator(); i.hasNext(); )
           {
  -            String name = ( String ) i.next();
  -            File jarFile = ( File ) pluginFiles.get( name );
  +            String name = (String) i.next();
  +            File jarFile = (File) pluginFiles.get( name );
               File dir = jarFile.isDirectory() ? jarFile : unpackPlugin( name, 
jarFile );
               pluginDirs.put( name, dir );
           }
  @@ -300,7 +322,7 @@
   
       JellyScriptHousing loadPluginHousing( String name, File pluginDir ) throws 
IOException
       {
  -        JellyScriptHousing housing = ( JellyScriptHousing ) pluginHousings.get( 
name );
  +        JellyScriptHousing housing = (JellyScriptHousing) pluginHousings.get( name 
);
           return ( housing == null ? createLazyPluginHousing( pluginDir ) : housing );
       }
   
  @@ -320,7 +342,7 @@
           if ( artifactIdToHousingMap.containsKey( artifactId ) )
           {
               JellyScriptHousing h = (JellyScriptHousing) artifactIdToHousingMap.get( 
artifactId );
  -            log.warn("WARNING: Plugin '" + artifactId + "' is already loaded from " 
+ h.getName() + "; attempting to load " + housing.getName());
  +            log.warn( "WARNING: Plugin '" + artifactId + "' is already loaded from 
" + h.getName() + "; attempting to load " + housing.getName() );
           }
           artifactIdToHousingMap.put( artifactId, housing );
       }
  @@ -338,9 +360,9 @@
           log.debug( "Loading plugin '" + pluginName + "'" );
   
           JellyScriptHousing jellyScriptHousing = new JellyScriptHousing( pluginDir, 
mavenSession.getRootContext() );
  -            
  +
           pluginHousings.put( pluginName, jellyScriptHousing );
  -                
  +
           return jellyScriptHousing;
       }
   
  @@ -350,14 +372,9 @@
       }
   
       /**
  -     * @param project
  -     * @param unpackedPluginDirectory
  -     * @param jelly
  -     * @return
  -     * @throws Exception
  -     * @todo [1.0] refactor into housing
  -     * @deprecated get rid of this - it duplicates functionality in the housing
  +     * @todo refactor into housing
        * @todo don't throw Exception
  +     * @todo get rid of this - it duplicates functionality in the housing
        */
       private JellyScriptHousing createJellyScriptHousing( Project project, 
InputStream jelly ) throws Exception
       {
  @@ -382,7 +399,6 @@
   
       /**
        * @param project
  -     * @param classesDirectory
        * @param jelly
        * @return
        * @todo [1.0] into the housing?
  @@ -405,7 +421,7 @@
        * @throws Exception             for any other issue. FIXME
        */
       public void processDependencies( Project project )
  -            throws MalformedURLException, Exception
  +        throws MalformedURLException, Exception
       {
           if ( project.getArtifacts() == null )
           {
  @@ -413,13 +429,13 @@
               return;
           }
   
  -        ForeheadClassLoader projectClassLoader = ( ForeheadClassLoader ) 
project.getContext().getClassLoader();
  +        ForeheadClassLoader projectClassLoader = (ForeheadClassLoader) 
project.getContext().getClassLoader();
           log.debug( "Processing dependencies for project " + project.getName() + "; 
classloader " + projectClassLoader );
   
           // add the dependencies to the classpath
  -        for ( Iterator i = project.getArtifacts().iterator(); i.hasNext();)
  +        for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
           {
  -            Artifact artifact = ( Artifact ) i.next();
  +            Artifact artifact = (Artifact) i.next();
               Dependency dependency = artifact.getDependency();
               if ( dependency.isPlugin() )
               {
  @@ -501,8 +517,7 @@
       /**
        * Attain the goals.
        *
  -     * @throws Exception
  -     *                   If one of the specified
  +     * @throws Exception If one of the specified
        *                   goals refers to an non-existent goal.
        * @throws Exception If an exception occurs while running a goal.
        * @todo stop throwing Exception
  @@ -510,6 +525,7 @@
       public void attainGoals( Project project, List goals ) throws Exception
       {
           MavenJellyContext prevBaseContext = baseContext;
  +
           baseContext = new MavenJellyContext( mavenSession.getRootContext() );
           baseContext.setInherit( true );
           JellyUtils.populateVariables( baseContext, project.getContext() );
  @@ -517,12 +533,6 @@
           baseContext.setProject( project );
   
           // Set up the ant project.
  -        // Before attempting to attain the goals verify the project
  -        // if desired.
  -        // FIXME: From attainGoals angle, how does it know the project needs to
  -        //        to be verified, or that the project object hasn't been used before
  -        project.verifyDependencies();
  -
           AntProjectBuilder.build( project, baseContext );
   
           // TODO: shouldn't this be a stack too? Then session attribute not needed
  @@ -567,8 +577,8 @@
           if ( goals != null )
           {
               for ( Iterator i = goals.iterator(); i.hasNext(); )
  -         {
  -                String goal = ( String ) i.next();
  +            {
  +                String goal = (String) i.next();
                   if ( goal.trim().length() == 0 )
                   {
                       i.remove();
  @@ -618,30 +628,33 @@
           try
           {
               runScript( driverHousing, baseContext );
  -            transientMapper.addResolvedPlugins( Collections.singletonList( 
driverHousing ));
  +            transientMapper.addResolvedPlugins( Collections.singletonList( 
driverHousing ) );
   
               // Dependencies must be processed after the driver is run for 
compatibility
  +            // FIXME: From attainGoals angle, how does it know the project needs to
  +            //        to be verified, or that the project object hasn't been used 
before
  +            project.verifyDependencies();
               processDependencies( project );
   
  -            for ( Iterator j = projectHousings.iterator(); j.hasNext();)
  +            for ( Iterator j = projectHousings.iterator(); j.hasNext(); )
               {
  -                JellyScriptHousing housing = ( JellyScriptHousing ) j.next();
  +                JellyScriptHousing housing = (JellyScriptHousing) j.next();
                   runScript( housing, baseContext );
               }
               transientMapper.addResolvedPlugins( projectHousings );
   
               // Plugin Jelly scripts
  -            for ( Iterator i = goals.iterator(); i.hasNext();)
  +            for ( Iterator i = goals.iterator(); i.hasNext(); )
               {
  -                String goalName = ( String ) i.next();
  +                String goalName = (String) i.next();
   
  -                pluginSet.addAll( prepAttainGoal( goalName, baseContext, 
transientMapper ));
  +                pluginSet.addAll( prepAttainGoal( goalName, baseContext, 
transientMapper ) );
               }
   
               // Plugin Jelly scripts
  -            for ( Iterator i = goals.iterator(); i.hasNext();)
  +            for ( Iterator i = goals.iterator(); i.hasNext(); )
               {
  -                String goalName = ( String ) i.next();
  +                String goalName = (String) i.next();
                   log.debug( "attaining goal " + goalName );
                   try
                   {
  @@ -675,9 +688,9 @@
       {
           delayedPops.addAll( pluginSet );
   
  -        for ( Iterator j = delayedPops.iterator(); j.hasNext();)
  +        for ( Iterator j = delayedPops.iterator(); j.hasNext(); )
           {
  -            JellyScriptHousing housing = ( JellyScriptHousing ) j.next();
  +            JellyScriptHousing housing = (JellyScriptHousing) j.next();
   
               reinstallPlugins( housing.getProject().getContext() );
   
  @@ -693,7 +706,7 @@
        * @param goalName    the goal
        * @param baseContext the base context to attain in
        * @return a set of plugins required to attain the goal
  -     * @throws Exception 
  +     * @throws Exception
        * @todo don't throw Exception
        */
       public Set prepAttainGoal( String goalName, MavenJellyContext baseContext,
  @@ -701,9 +714,9 @@
       {
           Set pluginSet = goalMapper.resolveJellyScriptHousings( goalName );
   
  -        for ( Iterator j = pluginSet.iterator(); j.hasNext();)
  +        for ( Iterator j = pluginSet.iterator(); j.hasNext(); )
           {
  -            JellyScriptHousing housing = ( JellyScriptHousing ) j.next();
  +            JellyScriptHousing housing = (JellyScriptHousing) j.next();
               initialiseHousingPluginContext( housing, baseContext );
           }
           return pluginSet;
  @@ -713,10 +726,13 @@
       {
           Project project = housing.getProject();
   
  +        // TODO: I think this should merge into pluginContext, but that seems to 
break existing jelly as it depends on
  +        // that kind of warped scoping
           MavenUtils.integrateMapInContext( housing.getPluginProperties(), 
baseContext );
   
           // TODO necessary to create a new one every time?
           MavenJellyContext pluginContext = new MavenJellyContext( baseContext );
  +        //MavenUtils.integrateMapInContext( project.getContext().getVariables(), 
pluginContext );
           project.pushContext( pluginContext );
           pluginContext.setInherit( true );
           pluginContext.setVariable( "context", pluginContext );
  @@ -801,8 +817,9 @@
       /**
        * Warning - this completely scrogs the default mapper. Only use this before 
System.exit!
        * (currently used by maven -u).
  -     * @todo refactor to return mapper instead and use that, or perhaps instantiate 
a new plugin manager
  +     *
        * @return
  +     * @todo refactor to return mapper instead and use that, or perhaps instantiate 
a new plugin manager
        */
       public Set getGoalNames( Project project ) throws MavenException
       {
  @@ -812,13 +829,23 @@
       }
   
       /**
  +     */
  +    public void installPlugin( File file, Project parentProject ) throws 
MavenException
  +    {
  +        // By default, don't copy to the unpacked plugins directory - only use this 
dependency for this project
  +        installPlugin( file, parentProject, false );
  +        // TODO:  we should unload the plugin after the project is done in this 
case - we really need
  +        // to define the lifecycle of plugins
  +    }
  +
  +    /**
        * Load and install a plugin.
        *
        * @param file          the file to install. Must be a plugin jar
        * @param parentProject the project to load the installed plugin into
        * @todo remove any old one
        */
  -    public void installPlugin( File file, Project parentProject )
  +    public void installPlugin( File file, Project parentProject, boolean cache )
           throws MavenException
       {
           log.debug( "Using plugin file: " + file );
  @@ -826,7 +853,7 @@
           {
               String pluginName = file.getCanonicalFile().getName();
               pluginName = pluginName.substring( 0, pluginName.indexOf( ".jar" ) );
  -    
  +
               if ( isLoaded( pluginName ) )
               {
                   // already installed this version
  @@ -865,6 +892,12 @@
                   housing.parse( transientMapper );
                   // Should only be putting in the transientMapper - but it is not 
consistent with isLoaded
                   housing.parse( mapper );
  +                if ( cache )
  +                {
  +                    cacheManager.registerPlugin( pluginName, housing );
  +                    housing.parse( cacheManager );
  +                    cacheManager.saveCache( unpackedPluginsDir );
  +                }
               }
               else
               {
  @@ -910,7 +943,7 @@
                   log.debug( "Reinstalling: " + housing );
                   housing.parse( transientMapper );
                   housing.parse( mapper );
  -             }
  +            }
           }
       }
   
  @@ -918,7 +951,7 @@
       {
           log.debug( "Uninstalling plugin: " + artifactId );
   
  -        JellyScriptHousing housing = ( JellyScriptHousing ) 
artifactIdToHousingMap.get( artifactId );
  +        JellyScriptHousing housing = (JellyScriptHousing) 
artifactIdToHousingMap.get( artifactId );
           if ( housing == null )
           {
               log.warn( "Plugin not found when attempting to uninstall '" + 
artifactId + "'" );
  @@ -935,31 +968,33 @@
       }
   
       /**
  -     * @todo [1.0] refactor out, or make more appropriate structure
        * @param id
        * @return
        * @throws UnknownPluginException
  +     * @todo [1.0] refactor out, or make more appropriate structure
        * @todo remove throws Exception
        */
       public MavenJellyContext getPluginContext( String id ) throws MavenException, 
UnknownPluginException
       {
  -        JellyScriptHousing housing = ( JellyScriptHousing ) 
artifactIdToHousingMap.get( id );
  +        JellyScriptHousing housing = (JellyScriptHousing) 
artifactIdToHousingMap.get( id );
           if ( housing != null )
           {
               Project project = housing.getProject();
               if ( baseContext != project.getContext().getParent() )
               {
  -                log.debug("Plugin context for " + id + " not initialised for this 
base context: initialising inside getPluginContext");
  -                try {
  +                log.debug( "Plugin context for " + id + " not initialised for this 
base context: initialising inside getPluginContext" );
  +                try
  +                {
                       return initialiseHousingPluginContext( housing, baseContext );
                   }
  -                catch (Exception e) {
  -                    throw new MavenException("Error initialising plugin context", 
e);
  +                catch ( Exception e )
  +                {
  +                    throw new MavenException( "Error initialising plugin context", 
e );
                   }
               }
               else
               {
  -                log.debug("Plugin context for " + id + " already initialised for 
this base context");
  +                log.debug( "Plugin context for " + id + " already initialised for 
this base context" );
                   return project.getContext();
               }
           }
  @@ -1015,8 +1050,8 @@
       }
   
       /**
  -     * @todo get rid of throws Exception
        * @return
  +     * @todo get rid of throws Exception
        */
       private Script loadScript( JellyScriptHousing jellyScriptHousing ) throws 
Exception
       {
  @@ -1029,7 +1064,7 @@
               // TODO: should differentiate between plugins and script housings better
               jellyScriptHousing.getProject().verifyDependencies();
               processDependencies( jellyScriptHousing.getProject() );
  -            ForeheadClassLoader pluginClassLoader = ( ForeheadClassLoader ) 
jellyScriptHousing.getProject().getContext().getClassLoader();
  +            ForeheadClassLoader pluginClassLoader = (ForeheadClassLoader) 
jellyScriptHousing.getProject().getContext().getClassLoader();
               pluginClassLoader.addURL( 
jellyScriptHousing.getPluginDirectory().toURL() );
           }
   
  @@ -1057,8 +1092,8 @@
       }
   
       /**
  -     * @param context            
  -     * @throws Exception 
  +     * @param context
  +     * @throws Exception
        * @todo get rid of throws Exception
        */
       void runScript( JellyScriptHousing jellyScriptHousing, MavenJellyContext 
context ) throws Exception
  @@ -1091,10 +1126,10 @@
           ArrayList list = new ArrayList();
           for ( Iterator i = pluginHousings.values().iterator(); i.hasNext(); )
           {
  -            JellyScriptHousing housing = ( JellyScriptHousing ) i.next();
  +            JellyScriptHousing housing = (JellyScriptHousing) i.next();
               list.add( housing.getName() );
           }
  -        Collections.sort(list);
  +        Collections.sort( list );
           return list;
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to