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 2007/10/25 06:04:05 UTC
svn commit: r588136 - in /maven/components/trunk/maven-core/src:
main/java/org/apache/maven/extension/ test/java/org/apache/maven/execution/
Author: jdcasey
Date: Wed Oct 24 21:04:04 2007
New Revision: 588136
URL: http://svn.apache.org/viewvc?rev=588136&view=rev
Log:
Adding a couple unit tests for the project-level session, and fixing potential NPE when an extension is declared that already exists in the core distribution.
Added:
maven/components/trunk/maven-core/src/test/java/org/apache/maven/execution/
maven/components/trunk/maven-core/src/test/java/org/apache/maven/execution/MavenProjectSessionTest.java (with props)
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionManagerException.java
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=588136&r1=588135&r2=588136&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 Wed Oct 24 21:04:04 2007
@@ -28,8 +28,7 @@
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.metadata.ResolutionGroup;
import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
@@ -65,9 +64,8 @@
import java.net.MalformedURLException;
import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -207,11 +205,19 @@
projectSessions.put( projectId, projectSession );
}
- // if the extension is null, or if it's already been added to the current project-session, skip it.
- if ( ( extensionArtifact != null ) && !projectSession.containsExtensionRealm( extensionArtifact ) )
+ ArtifactFilter coreFilter = artifactFilterManager.getArtifactFilter();
+
+ // if the extension is null,
+ // if it's already been added to the current project-session,
+ // or if it's excluded by the core filter,
+ //
+ // skip it.
+ if ( ( extensionArtifact != null )
+ && !projectSession.containsExtensionRealm( extensionArtifact )
+ && coreFilter.include( extensionArtifact ) )
{
ArtifactFilter filter =
- new ProjectArtifactExceptionFilter( artifactFilterManager.getArtifactFilter(), projectArtifact );
+ new ProjectArtifactExceptionFilter( coreFilter, projectArtifact );
ResolutionGroup resolutionGroup;
@@ -229,25 +235,32 @@
// not declare plexus-utils but need it. MNG-2900
DefaultPluginManager.checkPlexusUtils( resolutionGroup, artifactFactory );
- Set dependencies = new HashSet( resolutionGroup.getArtifacts() );
+ Set dependencies = new LinkedHashSet();
dependencies.add( extensionArtifact );
+ dependencies.addAll( resolutionGroup.getArtifacts() );
+
+ ArtifactResolutionRequest dependencyReq = new ArtifactResolutionRequest().setArtifact( projectArtifact )
+ .setArtifactDependencies( dependencies )
+ .setFilter( filter )
+ .setLocalRepository( localRepository )
+ .setRemoteRepostories( remoteRepositories )
+ .setMetadataSource( artifactMetadataSource );
// TODO: Make this work with managed dependencies, or an analogous management section in the POM.
- ArtifactResolutionResult result;
- try
- {
- result = artifactResolver.resolveTransitively( dependencies, projectArtifact,
- Collections.EMPTY_MAP, localRepository, remoteRepositories,
- artifactMetadataSource, filter );
- }
- catch ( ArtifactResolutionException e )
+ ArtifactResolutionResult result = artifactResolver.resolve( dependencyReq );
+
+ if ( result.hasCircularDependencyExceptions() || result.hasErrorArtifactExceptions()
+ || result.hasMetadataResolutionExceptions() || result.hasVersionRangeViolations() )
{
- throw new ExtensionManagerException( "Unable to resolve one or more extension artifacts for: " + extensionArtifact.getId(), extensionArtifact, projectId, e );
+ throw new ExtensionManagerException( "Failed to resolve extension: " + extensionArtifact, extensionArtifact, projectId, result );
}
- catch ( ArtifactNotFoundException e )
+
+ Set resultArtifacts = result.getArtifacts();
+
+ if ( !extensionArtifact.isResolved() || ( extensionArtifact.getFile() == null ) )
{
- throw new ExtensionManagerException( "One or more extension artifacts is missing for: " + extensionArtifact.getId(), extensionArtifact, projectId, e );
+ throw new ExtensionManagerException( "Extension artifact was not resolved, or has no file associated with it.", extensionArtifact, projectId );
}
ClassRealm extensionRealm;
@@ -260,7 +273,7 @@
throw new ExtensionManagerException( "Unable to create extension ClassRealm for extension: " + extensionArtifact.getId() + " within session for project: " + projectId, extensionArtifact, projectId, e );
}
- for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); )
+ for ( Iterator i = resultArtifacts.iterator(); i.hasNext(); )
{
Artifact a = (Artifact) i.next();
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionManagerException.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionManagerException.java?rev=588136&r1=588135&r2=588136&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionManagerException.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionManagerException.java Wed Oct 24 21:04:04 2007
@@ -2,8 +2,7 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.codehaus.plexus.PlexusContainerException;
import org.codehaus.plexus.classworlds.realm.DuplicateRealmException;
import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
@@ -18,6 +17,7 @@
private Artifact extensionArtifact;
private final String projectId;
+ private ArtifactResolutionResult resolutionResult;
public ExtensionManagerException( String message,
Artifact extensionArtifact,
@@ -42,7 +42,7 @@
public ExtensionManagerException( String message,
Artifact extensionArtifact,
String projectId,
- ArtifactResolutionException cause )
+ MalformedURLException cause )
{
super( message, cause );
this.extensionArtifact = extensionArtifact;
@@ -52,7 +52,7 @@
public ExtensionManagerException( String message,
Artifact extensionArtifact,
String projectId,
- ArtifactNotFoundException cause )
+ PlexusConfigurationException cause )
{
super( message, cause );
this.extensionArtifact = extensionArtifact;
@@ -60,19 +60,17 @@
}
public ExtensionManagerException( String message,
- Artifact extensionArtifact,
String projectId,
- MalformedURLException cause )
+ DuplicateRealmException cause )
{
super( message, cause );
- this.extensionArtifact = extensionArtifact;
this.projectId = projectId;
}
public ExtensionManagerException( String message,
Artifact extensionArtifact,
String projectId,
- PlexusConfigurationException cause )
+ NoSuchRealmException cause )
{
super( message, cause );
this.extensionArtifact = extensionArtifact;
@@ -81,7 +79,7 @@
public ExtensionManagerException( String message,
String projectId,
- DuplicateRealmException cause )
+ PlexusContainerException cause )
{
super( message, cause );
this.projectId = projectId;
@@ -90,7 +88,7 @@
public ExtensionManagerException( String message,
Artifact extensionArtifact,
String projectId,
- NoSuchRealmException cause )
+ ComponentRepositoryException cause )
{
super( message, cause );
this.extensionArtifact = extensionArtifact;
@@ -98,21 +96,23 @@
}
public ExtensionManagerException( String message,
- String projectId,
- PlexusContainerException cause )
+ Artifact extensionArtifact,
+ String projectId )
{
- super( message, cause );
+ super( message );
+ this.extensionArtifact = extensionArtifact;
this.projectId = projectId;
}
public ExtensionManagerException( String message,
Artifact extensionArtifact,
String projectId,
- ComponentRepositoryException cause )
+ ArtifactResolutionResult result )
{
- super( message, cause );
+ super( message );
this.extensionArtifact = extensionArtifact;
this.projectId = projectId;
+ resolutionResult = result;
}
public Artifact getExtensionArtifact()
@@ -123,6 +123,11 @@
public String getProjectId()
{
return projectId;
+ }
+
+ public ArtifactResolutionResult getArtifactResolutionResult()
+ {
+ return resolutionResult;
}
}
Added: maven/components/trunk/maven-core/src/test/java/org/apache/maven/execution/MavenProjectSessionTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/execution/MavenProjectSessionTest.java?rev=588136&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/execution/MavenProjectSessionTest.java (added)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/execution/MavenProjectSessionTest.java Wed Oct 24 21:04:04 2007
@@ -0,0 +1,164 @@
+package org.apache.maven.execution;
+
+import org.apache.maven.artifact.Artifact;
+import org.codehaus.plexus.PlexusContainerException;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.classworlds.realm.DuplicateRealmException;
+import org.easymock.MockControl;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+public class MavenProjectSessionTest
+ extends PlexusTestCase
+{
+
+ private Set mockControls = new HashSet();
+
+ private void replay()
+ {
+ for ( Iterator it = mockControls.iterator(); it.hasNext(); )
+ {
+ MockControl ctl = (MockControl) it.next();
+ ctl.replay();
+ }
+ }
+
+ private void verify()
+ {
+ for ( Iterator it = mockControls.iterator(); it.hasNext(); )
+ {
+ MockControl ctl = (MockControl) it.next();
+ ctl.verify();
+ }
+ }
+
+ public void testAddExtensionRealmThenContainsExtensionRealm_ReturnTrue()
+ throws PlexusContainerException
+ {
+ String projectId = "org.test:test-project1:1";
+
+ MavenProjectSession session = new MavenProjectSession( projectId, getContainer() );
+
+ ArtifactMock extMock = new ArtifactMock( "org.test.dep", "ext1", "2" );
+
+ replay();
+
+ try
+ {
+ session.createExtensionRealm( extMock.artifact );
+ }
+ catch ( DuplicateRealmException e )
+ {
+ e.printStackTrace();
+
+ fail( "ClassRealm for extension should not exist yet." );
+ }
+
+ assertTrue( "Should return true for containsExtensionRealm after extension is added.", session.containsExtensionRealm( extMock.artifact ) );
+
+ verify();
+ }
+
+ public void testConstructDisposeConstruct_OneExtension_NoDuplicateRealmException()
+ throws PlexusContainerException
+ {
+ String projectId = "org.test:test-project1:1";
+
+ MavenProjectSession session = new MavenProjectSession( projectId, getContainer() );
+
+ ArtifactMock extMock = new ArtifactMock( "org.test.dep", "ext1", "2" );
+
+ replay();
+
+ try
+ {
+ session.createExtensionRealm( extMock.artifact );
+ }
+ catch ( DuplicateRealmException e )
+ {
+ e.printStackTrace();
+
+ fail( "ClassRealm for extension should not exist yet." );
+ }
+
+ session.dispose();
+
+ session = new MavenProjectSession( projectId, getContainer() );
+
+ try
+ {
+ session.createExtensionRealm( extMock.artifact );
+ }
+ catch ( DuplicateRealmException e )
+ {
+ e.printStackTrace();
+
+ fail( "Should have disposed ClassRealm for extension." );
+ }
+
+ verify();
+ }
+
+ public void testAddSameExtensionTwice_DuplicateRealmException()
+ throws PlexusContainerException
+ {
+ String projectId = "org.test:test-project1:1";
+
+ MavenProjectSession session = new MavenProjectSession( projectId, getContainer() );
+
+ ArtifactMock extMock = new ArtifactMock( "org.test.dep", "ext1", "2" );
+
+ replay();
+
+ try
+ {
+ session.createExtensionRealm( extMock.artifact );
+ }
+ catch ( DuplicateRealmException e )
+ {
+ e.printStackTrace();
+
+ fail( "ClassRealm for extension should not exist yet." );
+ }
+
+ try
+ {
+ session.createExtensionRealm( extMock.artifact );
+ fail( "Should not allow same extension to be added twice." );
+ }
+ catch ( DuplicateRealmException e )
+ {
+ }
+
+ verify();
+ }
+
+ private class ArtifactMock
+ {
+ private MockControl ctl;
+
+ private Artifact artifact;
+
+ public ArtifactMock( String groupId,
+ String artifactId,
+ String version )
+ {
+ ctl = MockControl.createControl( Artifact.class );
+ artifact = (Artifact) ctl.getMock();
+
+ artifact.getGroupId();
+ ctl.setReturnValue( groupId, MockControl.ZERO_OR_MORE );
+
+ artifact.getArtifactId();
+ ctl.setReturnValue( artifactId, MockControl.ZERO_OR_MORE );
+
+ artifact.getVersion();
+ ctl.setReturnValue( version, MockControl.ZERO_OR_MORE );
+
+ mockControls.add( ctl );
+ }
+ }
+
+}
Propchange: maven/components/trunk/maven-core/src/test/java/org/apache/maven/execution/MavenProjectSessionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/test/java/org/apache/maven/execution/MavenProjectSessionTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"