jvanzyl     2002/07/16 01:01:34

  Modified:    src/java/org/apache/maven/app Maven.java PluginManager.java
  Log:
  o Updating the plugin manager so that it now works with completely
    self-contained JARs.
  
    The checkstyle plugin is the first to work all from the JAR. The JARs
    are pushed into the various classloaders using the meta info attached
    to the dependency entries in the plugin's project.xml.
  
    The rest of the plugins can be converted but the mechanism is working.
  
  Revision  Changes    Path
  1.69      +48 -14    jakarta-turbine-maven/src/java/org/apache/maven/app/Maven.java
  
  Index: Maven.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-maven/src/java/org/apache/maven/app/Maven.java,v
  retrieving revision 1.68
  retrieving revision 1.69
  diff -u -r1.68 -r1.69
  --- Maven.java        16 Jul 2002 00:11:27 -0000      1.68
  +++ Maven.java        16 Jul 2002 08:01:34 -0000      1.69
  @@ -205,6 +205,9 @@
       /** Plugin Manager */
       private PluginManager pluginManager;
   
  +    /** Project verifier */
  +    private ProjectVerifier projectVerifier;
  +
       // ------------------------------------------------------------
       //     Constructors
       // ------------------------------------------------------------
  @@ -426,6 +429,22 @@
           return this.output;
       }
   
  +    /**
  +     * Set the project verifier.
  +     */
  +    public void setProjectVerifier(ProjectVerifier projectVerifier)
  +    {
  +        this.projectVerifier = projectVerifier;
  +    }
  +    
  +    /**
  +     * Get the project verifier.
  +     */
  +    public ProjectVerifier getProjectVerifier()
  +    {
  +        return projectVerifier;
  +    }        
  +
       /** Retrieve a property.
        *
        * @param name the property name to retrieve
  @@ -637,7 +656,7 @@
       private void runtimeInitialization() throws Exception
       {
           initializeDriver();
  -
  +        createProjectVerifier();
           initializePlugins();
           loadProjectBuildFile();
       }
  @@ -679,6 +698,7 @@
           pluginManager.setAntProject(getAntProject());
           pluginManager.setJellyContext(getJellyContext());
           pluginManager.setXMLOutput(getXMLOutput());
  +        pluginManager.setProjectVerifier(getProjectVerifier());
           pluginManager.initializePlugins();
       }
   
  @@ -1282,8 +1302,12 @@
               }
           }
       }
  -
  -    public void verifyProject() throws Exception
  +    
  +    /**
  +     * Create project verifier
  +     */
  +    private ProjectVerifier createProjectVerifier()
  +        throws Exception
       {
           String localRepoProp = getProperty("maven.repo.local");
   
  @@ -1355,21 +1379,32 @@
               throw new RepoConfigException(localRepo + " is not writable.");
           }
   
  -        ProjectVerifier verifier = new ProjectVerifier();
  +        projectVerifier = new ProjectVerifier();
   
  -        verifier.setMavenRemoteRepo(remoteRepoProp);
  -        verifier.setMavenLocalRepo(localRepoProp);
  -        verifier.setMavenProject(getProjectDescriptor().getProject());
  -        verifier.setProject(getAntProject());
  +        projectVerifier.setMavenRemoteRepo(remoteRepoProp);
  +        projectVerifier.setMavenLocalRepo(localRepoProp);
  +        projectVerifier.setMavenProject(getProjectDescriptor().getProject());
  +        projectVerifier.setProject(getAntProject());
           String proxyHost = getProperty("maven.proxy.host");
           if (proxyHost != null)
           {
  -            verifier.setProxyHost(proxyHost);
  -            verifier.setProxyPort(getProperty("maven.proxy.port"));
  -            verifier.setProxyUserName(getProperty("maven.proxy.username"));
  -            verifier.setProxyPassword(getProperty("maven.proxy.password"));
  +            projectVerifier.setProxyHost(proxyHost);
  +            projectVerifier.setProxyPort(getProperty("maven.proxy.port"));
  +            projectVerifier.setProxyUserName(getProperty("maven.proxy.username"));
  +            projectVerifier.setProxyPassword(getProperty("maven.proxy.password"));
           }
  -        verifier.doExecute();
  +        
  +        return projectVerifier;
  +    }   
  +
  +    /**
  +     * Verify a project. Basically make sure the dependencies are
  +     * present and do a basic sanity check.
  +     */
  +    public void verifyProject() throws Exception
  +    {
  +        getProjectVerifier().setMavenProject(getProjectDescriptor().getProject());
  +        getProjectVerifier().doExecute();
       }
   
       /**
  @@ -1635,6 +1670,5 @@
   
           maven.doMain(args);
       }
  -
   }
   
  
  
  
  1.12      +58 -8     
jakarta-turbine-maven/src/java/org/apache/maven/app/PluginManager.java
  
  Index: PluginManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-maven/src/java/org/apache/maven/app/PluginManager.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- PluginManager.java        16 Jul 2002 02:40:03 -0000      1.11
  +++ PluginManager.java        16 Jul 2002 08:01:34 -0000      1.12
  @@ -82,9 +82,13 @@
   import com.werken.forehead.Forehead;
   
   import org.apache.maven.MavenUtils;
  +import org.apache.maven.ProjectVerifier;
   import org.apache.maven.project.Dependency;
   import org.apache.maven.project.Project;
   
  +// Tmp
  +import org.apache.maven.repository.DefaultJarArtifact;
  +
   /**
    * Plugin manager for Maven. <p>
    *
  @@ -141,6 +145,11 @@
       private File mavenHome;
   
       /**
  +     * Project verifier
  +     */
  +    private ProjectVerifier projectVerifier;
  +
  +    /**
        * Initialize all plugins.
        *
        * @throws Exception If an error occurs while initializing any plugin.
  @@ -223,19 +232,44 @@
           log.debug("plugin: " + name + " -> " + getPluginDir(name));
           
Forehead.getInstance().getClassLoader("root.maven").addURL(getPluginDir(name).toURL());
           
  -        /*
  -        Project pluginProject = MavenUtils.getProject(p);
  +        // Retrieve the dependencies that this plugin requires.
  +        Project pluginProject = MavenUtils.getProject(new 
File(getPluginDir(name),"project.xml"));
  +        getProjectVerifier().setMavenProject(pluginProject);
  +        getProjectVerifier().doExecute();
           
  +        log.debug("Loading plugin dependencies:");
           for (Iterator i = pluginProject.getDependencies().iterator(); i.hasNext();)
           {
  -            Dependency d = (Dependency) i.next();
  -            String classloader = d.getMetaEntry("classloader");            
  -            // Retrieve the dependency if necessary
  +            Dependency dependency = (Dependency) i.next();
  +            log.debug("dependency: " + dependency);
  +            
  +            String classloader = dependency.getMetaEntry("classloader");
  +            log.debug("classloader: " + classloader);
               
  -            // Add the dependency to the specified classloader
  -            // if it isn't present already.
  +            if (classloader != null)
  +            {
  +                DefaultJarArtifact dfa = new DefaultJarArtifact();
  +            
  +                File jarFile = new File(getProjectVerifier().getMavenLocalRepo(),
  +                    dfa.getPath(dependency.getId(),
  +                                dependency.getVersion(),
  +                                dependency.getJar()));
  +                
  +                log.debug("jarFile: " + jarFile);
  +                
  +                // We have the jar and the classloader to push it into so
  +                // lets do it!
  +                if (jarFile.exists())
  +                {
  +                    // Make sure the stated classloader actually exists.
  +                    if (Forehead.getInstance().getClassLoader(classloader) != null)
  +                    {
  +                        log.debug("Adding " + jarFile + " to " + classloader);
  +                        
Forehead.getInstance().getClassLoader(classloader).addURL(jarFile.toURL());
  +                    }                        
  +                }
  +            }
           }
  -        */
   
           // For each plugin we create a new MavenJellyContext so that we
           // can push in commonly named elements like ${plugin.dir} without
  @@ -470,4 +504,20 @@
       {
           return this.pluginsDir;
       }
  +    
  +    /**
  +     * Set the project verifier.
  +     */
  +    public void setProjectVerifier(ProjectVerifier projectVerifier)
  +    {
  +        this.projectVerifier = projectVerifier;
  +    }
  +    
  +    /**
  +     * Get the project verifier.
  +     */
  +    public ProjectVerifier getProjectVerifier()
  +    {
  +        return projectVerifier;
  +    }        
   }
  
  
  

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

Reply via email to