You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2009/07/14 01:24:10 UTC
svn commit: r793745 - in /maven/maven-2/branches/maven-2.2.x:
maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/
maven-core/src/main/java/org/apache/maven/execution/
maven-core/src/main/java/org/apache/maven/extension/ maven-core/s...
Author: jdcasey
Date: Mon Jul 13 23:24:10 2009
New Revision: 793745
URL: http://svn.apache.org/viewvc?rev=793745&view=rev
Log:
[MNG-3506] Allow projects to specify a build extension that provides an artifact handler which will then be used for the project's own artifact.
Modified:
maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonProviderMapping.java
maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonProviderMapping.java
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
maven/maven-2/branches/maven-2.2.x/maven-core/src/test/java/org/apache/maven/WagonSelectorTest.java
maven/maven-2/branches/maven-2.2.x/maven-core/src/test/resources/org/apache/maven/WagonSelectorTest.xml
maven/maven-2/branches/maven-2.2.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java
Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonProviderMapping.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonProviderMapping.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonProviderMapping.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonProviderMapping.java Mon Jul 13 23:24:10 2009
@@ -1,5 +1,24 @@
package org.apache.maven.artifact.manager;
+/*
+ * 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 java.util.HashMap;
import java.util.Map;
Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonProviderMapping.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonProviderMapping.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonProviderMapping.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonProviderMapping.java Mon Jul 13 23:24:10 2009
@@ -1,5 +1,24 @@
package org.apache.maven.artifact.manager;
+/*
+ * 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.
+ */
+
public interface WagonProviderMapping
{
Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java Mon Jul 13 23:24:10 2009
@@ -160,7 +160,7 @@
return settings;
}
- public List getSortedProjects()
+ public List<MavenProject> getSortedProjects()
{
return reactorManager.getSortedProjects();
}
Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java Mon Jul 13 23:24:10 2009
@@ -203,7 +203,7 @@
return sorter.hasMultipleProjects();
}
- public List getSortedProjects()
+ public List<MavenProject> getSortedProjects()
{
return sorter.getSortedProjects();
}
Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java Mon Jul 13 23:24:10 2009
@@ -23,6 +23,7 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.manager.WagonManager;
import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
@@ -45,6 +46,7 @@
import org.codehaus.plexus.PlexusConstants;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.PlexusContainerException;
+import org.codehaus.plexus.component.repository.ComponentDescriptor;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.context.Context;
import org.codehaus.plexus.context.ContextException;
@@ -57,6 +59,7 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
@@ -261,11 +264,12 @@
return child;
}
+ @SuppressWarnings( "unchecked" )
public void registerWagons()
{
if ( extensionContainer != null )
{
- Map wagons = extensionContainer.getComponentDescriptorMap( Wagon.ROLE );
+ Map<String, ComponentDescriptor> wagons = extensionContainer.getComponentDescriptorMap( Wagon.ROLE );
if ( wagons != null && !wagons.isEmpty() )
{
getLogger().debug( "Wagons to register: " + wagons.keySet() );
@@ -277,6 +281,37 @@
getLogger().debug( "Wagons could not be registered as the extension container was never created" );
}
}
+
+ @SuppressWarnings( "unchecked" )
+ public Map<String, ArtifactHandler> getArtifactTypeHandlers()
+ {
+ Map<String, ArtifactHandler> result = new HashMap<String, ArtifactHandler>();
+
+ if ( extensionContainer != null )
+ {
+ try
+ {
+ result.putAll( extensionContainer.lookupMap( ArtifactHandler.ROLE ) );
+ }
+ catch ( ComponentLookupException e )
+ {
+ getLogger().debug( "ArtifactHandler extensions could not be loaded: " + e.getMessage(), e );
+ }
+ }
+ else
+ {
+ try
+ {
+ result.putAll( container.lookupMap( ArtifactHandler.ROLE ) );
+ }
+ catch ( ComponentLookupException e )
+ {
+ getLogger().debug( "ArtifactHandler extensions could not be loaded: " + e.getMessage(), e );
+ }
+ }
+
+ return result;
+ }
public void contextualize( Context context )
throws ContextException
Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java Mon Jul 13 23:24:10 2009
@@ -19,6 +19,7 @@
* under the License.
*/
+import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
@@ -26,6 +27,8 @@
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.PlexusContainerException;
+import java.util.Map;
+
/**
* Used to locate extensions.
*
@@ -38,4 +41,6 @@
throws ArtifactResolutionException, PlexusContainerException, ArtifactNotFoundException;
void registerWagons();
+
+ Map<String, ArtifactHandler> getArtifactTypeHandlers();
}
Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Mon Jul 13 23:24:10 2009
@@ -185,10 +185,9 @@
throws LifecycleExecutionException
{
// TODO: MNG-4081. What about extensions within the current reactor??
- for ( Iterator i = session.getSortedProjects().iterator(); i.hasNext(); )
+ Map<String, ArtifactHandler> handlers = new HashMap<String, ArtifactHandler>();
+ for ( MavenProject project : session.getSortedProjects() )
{
- MavenProject project = (MavenProject) i.next();
-
for ( Iterator j = project.getBuildExtensions().iterator(); j.hasNext(); )
{
Extension extension = (Extension) j.next();
@@ -211,19 +210,37 @@
}
}
- extensionManager.registerWagons();
+ }
+
+ extensionManager.registerWagons();
+
+ handlers.putAll( extensionManager.getArtifactTypeHandlers() );
+ for ( MavenProject project : session.getSortedProjects() )
+ {
try
{
- Map handlers = findArtifactTypeHandlers( project, session.getSettings(), session.getLocalRepository() );
+ handlers.putAll( findArtifactTypeHandlersInPlugins( project, session.getSettings(), session.getLocalRepository() ) );
- artifactHandlerManager.addHandlers( handlers );
+ // shudder...
+ for ( ArtifactHandler handler : handlers.values() )
+ {
+ if ( project.getPackaging().equals( handler.getPackaging() ) )
+ {
+ project.getArtifact().setArtifactHandler( handler );
+
+ // NOTE: Adding this (maven 2.2.1) to short-circuit things. This means first match is used, NOT LAST.
+ break;
+ }
+ }
}
catch ( PluginNotFoundException e )
{
throw new LifecycleExecutionException( e.getMessage(), e );
}
}
+
+ artifactHandlerManager.addHandlers( handlers );
}
private void executeTaskSegments( List taskSegments, ReactorManager rm, MavenSession session,
@@ -1443,10 +1460,11 @@
* @todo Not particularly happy about this. Would like WagonManager and ArtifactTypeHandlerManager to be able to
* lookup directly, or have them passed in
*/
- private Map findArtifactTypeHandlers( MavenProject project, Settings settings, ArtifactRepository localRepository )
+ private Map<String, ArtifactHandler> findArtifactTypeHandlersInPlugins( MavenProject project, Settings settings,
+ ArtifactRepository localRepository )
throws LifecycleExecutionException, PluginNotFoundException
{
- Map map = new HashMap();
+ Map<String, ArtifactHandler> map = new HashMap<String, ArtifactHandler>();
for ( Iterator i = project.getBuildPlugins().iterator(); i.hasNext(); )
{
Plugin plugin = (Plugin) i.next();
@@ -1470,16 +1488,6 @@
throw new LifecycleExecutionException( "Error looking up available components from plugin '" +
plugin.getKey() + "': " + e.getMessage(), e );
}
-
- // shudder...
- for ( Iterator j = map.values().iterator(); j.hasNext(); )
- {
- ArtifactHandler handler = (ArtifactHandler) j.next();
- if ( project.getPackaging().equals( handler.getPackaging() ) )
- {
- project.getArtifact().setArtifactHandler( handler );
- }
- }
}
}
return map;
Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/test/java/org/apache/maven/WagonSelectorTest.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/test/java/org/apache/maven/WagonSelectorTest.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/test/java/org/apache/maven/WagonSelectorTest.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/test/java/org/apache/maven/WagonSelectorTest.java Mon Jul 13 23:24:10 2009
@@ -1,5 +1,24 @@
package org.apache.maven;
+/*
+ * 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.artifact.manager.WagonConfigurationException;
import org.apache.maven.artifact.manager.WagonManager;
import org.apache.maven.artifact.repository.ArtifactRepository;
Modified: maven/maven-2/branches/maven-2.2.x/maven-core/src/test/resources/org/apache/maven/WagonSelectorTest.xml
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-core/src/test/resources/org/apache/maven/WagonSelectorTest.xml?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-core/src/test/resources/org/apache/maven/WagonSelectorTest.xml (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-core/src/test/resources/org/apache/maven/WagonSelectorTest.xml Mon Jul 13 23:24:10 2009
@@ -1,3 +1,22 @@
+<!--
+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.
+-->
+
<component-set>
<components>
<component>
Modified: maven/maven-2/branches/maven-2.2.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java?rev=793745&r1=793744&r2=793745&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java Mon Jul 13 23:24:10 2009
@@ -52,7 +52,7 @@
private final Map projectMap;
- private final List sortedProjects;
+ private final List<MavenProject> sortedProjects;
private MavenProject topLevelProject;
@@ -369,7 +369,7 @@
return topLevelProject;
}
- public List getSortedProjects()
+ public List<MavenProject> getSortedProjects()
{
return sortedProjects;
}