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 2009/08/20 00:11:36 UTC

svn commit: r805995 - in /maven/components/trunk/maven-core/src/main/java/org/apache/maven: lifecycle/ lifecycle/mapping/ plugin/ plugin/internal/ plugin/version/

Author: bentmann
Date: Wed Aug 19 22:11:34 2009
New Revision: 805995

URL: http://svn.apache.org/viewvc?rev=805995&view=rev
Log:
o Restored more backward-compat code

Added:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java   (with props)
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java   (with props)
Modified:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecycleMapping.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolver.java

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=805995&r1=805994&r2=805995&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Wed Aug 19 22:11:34 2009
@@ -1243,7 +1243,7 @@
     //TODO: take repo mans into account as one may be aggregating prefixes of many
     //TODO: collect at the root of the repository, read the one at the root, and fetch remote if something is missing
     //      or the user forces the issue
-    public Plugin findPluginForPrefix( String prefix, MavenSession session )
+    Plugin findPluginForPrefix( String prefix, MavenSession session )
         throws NoPluginFoundForPrefixException
     {        
         // [prefix]:[goal]

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecycleMapping.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecycleMapping.java?rev=805995&r1=805994&r2=805995&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecycleMapping.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecycleMapping.java Wed Aug 19 22:11:34 2009
@@ -25,6 +25,9 @@
 public interface LifecycleMapping
 {        
 
+    @Deprecated
+    String ROLE = LifecycleMapping.class.getName();
+
     Map<String, Lifecycle> getLifecycles();
 
     @Deprecated

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java?rev=805995&r1=805994&r2=805995&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java Wed Aug 19 22:11:34 2009
@@ -52,6 +52,9 @@
     @Requirement
     private MavenPluginManager mavenPluginManager;
 
+    @Requirement
+    private LegacySupport legacySupport;
+
     /**
      * 
      * @param plugin
@@ -87,12 +90,16 @@
         ClassRealm oldLookupRealm = container.getLookupRealm();
         ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
 
+        MavenSession oldSession = legacySupport.getSession();
+
         try
         {                        
             mojo = mavenPluginManager.getConfiguredMojo( Mojo.class, session, mojoExecution );
 
             Thread.currentThread().setContextClassLoader( pluginRealm );
 
+            legacySupport.setSession( session );
+
             // NOTE: DuplicateArtifactAttachmentException is currently unchecked, so be careful removing this try/catch!
             // This is necessary to avoid creating compatibility problems for existing plugins that use
             // MavenProjectHelper.attachArtifact(..).
@@ -125,6 +132,8 @@
             }
 
             Thread.currentThread().setContextClassLoader( oldClassLoader );
+
+            legacySupport.setSession( oldSession );
         }
     }
 

Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java?rev=805995&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java Wed Aug 19 22:11:34 2009
@@ -0,0 +1,50 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+
+/**
+ * Helps to provide backward-compatibility with plugins that use legacy components. <strong>Warning:</strong> This is an
+ * internal utility interface that is only public for technical reasons, it is not part of the public API. In
+ * particular, this interface can be changed or deleted without prior notice.
+ * 
+ * @author Benjamin Bentmann
+ */
+public interface LegacySupport
+{
+
+    /**
+     * Sets the currently active session. Some legacy components are basically stateful and their API is missing
+     * parameters that would be required to delegate to a stateless component. Saving the session (in a thread-local
+     * variable) is our best effort to record any state that is required to enable proper delegation.
+     * 
+     * @param session The currently active session, may be {@code null}.
+     */
+    void setSession( MavenSession session );
+
+    /**
+     * Gets the currently active session.
+     * 
+     * @return The currently active session or {@code null} if none.
+     */
+    MavenSession getSession();
+
+}

Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java?rev=805995&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java Wed Aug 19 22:11:34 2009
@@ -0,0 +1,57 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.LegacySupport;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Helps to provide backward-compatibility with plugins that use legacy components. <strong>Warning:</strong> This is an
+ * internal utility component that is only public for technical reasons, it is not part of the public API. In
+ * particular, this component can be changed or deleted without prior notice.
+ * 
+ * @author Benjamin Bentmann
+ */
+@Component( role = LegacySupport.class )
+public class DefaultLegacySupport
+    implements LegacySupport
+{
+
+    private ThreadLocal<MavenSession> session = new ThreadLocal<MavenSession>();
+
+    public void setSession( MavenSession session )
+    {
+        if ( session == null )
+        {
+            this.session.remove();
+        }
+        else
+        {
+            this.session.set( session );
+        }
+    }
+
+    public MavenSession getSession()
+    {
+        return session.get();
+    }
+
+}

Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java?rev=805995&r1=805994&r2=805995&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java Wed Aug 19 22:11:34 2009
@@ -22,26 +22,37 @@
 import java.util.Map;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
+import org.apache.maven.artifact.repository.RepositoryRequest;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Plugin;
-import org.apache.maven.plugin.BuildPluginManager;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
 import org.apache.maven.plugin.InvalidPluginException;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.plugin.MavenPluginManager;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.PluginConfigurationException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
 import org.apache.maven.plugin.PluginManager;
 import org.apache.maven.plugin.PluginManagerException;
 import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.version.DefaultPluginVersionRequest;
 import org.apache.maven.plugin.version.PluginVersionNotFoundException;
+import org.apache.maven.plugin.version.PluginVersionRequest;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolver;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
@@ -55,7 +66,31 @@
 {
 
     @Requirement
-    private BuildPluginManager pluginManager;
+    private PlexusContainer container;
+
+    @Requirement
+    private MavenPluginManager pluginManager;
+
+    @Requirement
+    private PluginVersionResolver pluginVersionResolver;
+
+    @Requirement
+    private LegacySupport legacySupport;
+
+    private RepositoryRequest getRepositoryRequest( MavenSession session, MavenProject project )
+    {
+        RepositoryRequest request = new DefaultRepositoryRequest();
+
+        request.setCache( session.getRepositoryCache() );
+        request.setLocalRepository( session.getLocalRepository() );
+        if ( project != null )
+        {
+            request.setRemoteRepositories( project.getPluginArtifactRepositories() );
+        }
+        request.setOffline( session.isOffline() );
+
+        return request;
+    }
 
     public void executeMojo( MavenProject project, MojoExecution execution, MavenSession session )
         throws MojoExecutionException, ArtifactResolutionException, MojoFailureException, ArtifactNotFoundException,
@@ -67,15 +102,65 @@
     public Object getPluginComponent( Plugin plugin, String role, String roleHint )
         throws PluginManagerException, ComponentLookupException
     {
-        // TODO Auto-generated method stub
-        return null;
+        MavenSession session = legacySupport.getSession();
+
+        PluginDescriptor pluginDescriptor;
+        try
+        {
+            RepositoryRequest repositoryRequest = getRepositoryRequest( session, session.getCurrentProject() );
+
+            pluginDescriptor = pluginManager.getPluginDescriptor( plugin, repositoryRequest );
+
+            pluginManager.setupPluginRealm( pluginDescriptor, session, null, null );
+        }
+        catch ( Exception e )
+        {
+            throw new PluginManagerException( plugin, e.getMessage(), e );
+        }
+
+        ClassRealm oldRealm = container.getLookupRealm();
+        try
+        {
+            container.setLookupRealm( pluginDescriptor.getClassRealm() );
+
+            return container.lookup( role, roleHint );
+        }
+        finally
+        {
+            container.setLookupRealm( oldRealm );
+        }
     }
 
     public Map getPluginComponents( Plugin plugin, String role )
         throws ComponentLookupException, PluginManagerException
     {
-        // TODO Auto-generated method stub
-        return null;
+        MavenSession session = legacySupport.getSession();
+
+        PluginDescriptor pluginDescriptor;
+        try
+        {
+            RepositoryRequest repositoryRequest = getRepositoryRequest( session, session.getCurrentProject() );
+
+            pluginDescriptor = pluginManager.getPluginDescriptor( plugin, repositoryRequest );
+
+            pluginManager.setupPluginRealm( pluginDescriptor, session, null, null );
+        }
+        catch ( Exception e )
+        {
+            throw new PluginManagerException( plugin, e.getMessage(), e );
+        }
+
+        ClassRealm oldRealm = container.getLookupRealm();
+        try
+        {
+            container.setLookupRealm( pluginDescriptor.getClassRealm() );
+
+            return container.lookupMap( role );
+        }
+        finally
+        {
+            container.setLookupRealm( oldRealm );
+        }
     }
 
     public Plugin getPluginDefinitionForPrefix( String prefix, MavenSession session, MavenProject project )
@@ -95,8 +180,7 @@
         InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
         PluginVersionNotFoundException
     {
-        // TODO Auto-generated method stub
-        return null;
+        return verifyPlugin( plugin, project, session.getSettings(), session.getLocalRepository() );
     }
 
     public PluginDescriptor loadPluginFully( Plugin plugin, MavenProject project, MavenSession session )
@@ -104,8 +188,18 @@
         InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
         PluginVersionNotFoundException
     {
-        // TODO Auto-generated method stub
-        return null;
+        PluginDescriptor pluginDescriptor = loadPluginDescriptor( plugin, project, session );
+
+        try
+        {
+            pluginManager.setupPluginRealm( pluginDescriptor, session, null, null );
+        }
+        catch ( PluginResolutionException e )
+        {
+            throw new PluginManagerException( plugin, e.getMessage(), e );
+        }
+
+        return pluginDescriptor;
     }
 
     public PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings,
@@ -114,8 +208,33 @@
         InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
         PluginVersionNotFoundException
     {
-        // TODO Auto-generated method stub
-        return null;
+        RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
+        repositoryRequest.setLocalRepository( localRepository );
+        repositoryRequest.setRemoteRepositories( project.getPluginArtifactRepositories() );
+        repositoryRequest.setOffline( settings.isOffline() );
+
+        if ( plugin.getVersion() == null )
+        {
+            PluginVersionRequest versionRequest = new DefaultPluginVersionRequest( plugin, repositoryRequest );
+            plugin.setVersion( pluginVersionResolver.resolve( versionRequest ).getVersion() );
+        }
+
+        try
+        {
+            return pluginManager.getPluginDescriptor( plugin, repositoryRequest );
+        }
+        catch ( PluginResolutionException e )
+        {
+            throw new PluginNotFoundException( plugin, repositoryRequest.getRemoteRepositories() );
+        }
+        catch ( PluginDescriptorParsingException e )
+        {
+            throw new PluginManagerException( plugin, e.getMessage(), e );
+        }
+        catch ( InvalidPluginDescriptorException e )
+        {
+            throw new PluginManagerException( plugin, e.getMessage(), e );
+        }
     }
 
 }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolver.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolver.java?rev=805995&r1=805994&r2=805995&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolver.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolver.java Wed Aug 19 22:11:34 2009
@@ -32,7 +32,7 @@
      * 
      * @param request The request that holds the details about the plugin and the repositories to consult, must not be
      *            {@code null}.
-     * @return The result of the version resolutioh, never {@code null}.
+     * @return The result of the version resolution, never {@code null}.
      * @throws PluginVersionResolutionException If the plugin version could not be resolved.
      */
     PluginVersionResult resolve( PluginVersionRequest request )