You are viewing a plain text version of this content. The canonical link for it is here.
Posted to m2-dev@maven.apache.org by br...@apache.org on 2005/03/08 06:34:52 UTC
cvs commit: maven-components/maven-artifact/src/main/java/org/apache/maven/artifact AbstractArtifactComponent.java DefaultArtifact.java
brett 2005/03/07 21:34:52
Modified: maven-core/src/main/java/org/apache/maven/artifact
MavenMetadataSource.java
maven-core/src/main/java/org/apache/maven/plugin
DefaultPluginManager.java
maven-core/src/main/java/org/apache/maven/project
MavenProject.java
maven-model maven.mdo
maven-artifact/src/main/java/org/apache/maven/artifact/resolver
DefaultArtifactResolver.java
maven-artifact/src/main/java/org/apache/maven/artifact
AbstractArtifactComponent.java DefaultArtifact.java
Added: maven-core/src/test/java/org/apache/maven/project
ProjectClasspathArtifactResolver.java
ProjectClasspathTest.java
maven-core/src/test/resources/org/apache/maven/project
ProjectClasspathTest.xml
maven-core/src/test/resources/projects/scope
project-with-scoped-dependencies.xml
transitive-compile-dep.xml
transitive-default-dep.xml
transitive-runtime-dep.xml transitive-test-dep.xml
Log:
tests and repairs for scope
Revision Changes Path
1.13 +20 -7 maven-components/maven-core/src/main/java/org/apache/maven/artifact/MavenMetadataSource.java
Index: MavenMetadataSource.java
===================================================================
RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/artifact/MavenMetadataSource.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- MavenMetadataSource.java 7 Mar 2005 09:41:55 -0000 1.12
+++ MavenMetadataSource.java 8 Mar 2005 05:34:51 -0000 1.13
@@ -79,12 +79,12 @@
if ( mavenProjectBuilder != null )
{
MavenProject project = mavenProjectBuilder.build( metadataArtifact.getFile(), localRepository );
- artifacts = createArtifacts( project.getDependencies(), localRepository );
+ artifacts = createArtifacts( project.getDependencies(), artifact.getScope(), localRepository );
}
else
{
Model model = reader.read( new FileReader( metadataArtifact.getFile() ) );
- artifacts = createArtifacts( model.getDependencies(), localRepository );
+ artifacts = createArtifacts( model.getDependencies(), artifact.getScope(), localRepository );
}
}
catch ( ArtifactResolutionException e )
@@ -99,27 +99,40 @@
return artifacts;
}
- public Set createArtifacts( List dependencies, ArtifactRepository localRepository )
+ protected Set createArtifacts( List dependencies, String scope, ArtifactRepository localRepository )
{
Set projectArtifacts = new HashSet();
for ( Iterator i = dependencies.iterator(); i.hasNext(); )
{
Dependency d = (Dependency) i.next();
- Artifact artifact = createArtifact( d, localRepository );
+ Artifact artifact = createArtifact( d, scope, localRepository );
projectArtifacts.add( artifact );
}
return projectArtifacts;
}
- public Artifact createArtifact( Dependency dependency, ArtifactRepository localRepository )
+ protected Artifact createArtifact( Dependency dependency, String scope, ArtifactRepository localRepository )
{
// TODO: duplicated with the ArtifactFactory, localRepository not used (should be used here to resolve path?
Artifact artifact = new DefaultArtifact( dependency.getGroupId(),
dependency.getArtifactId(),
dependency.getVersion(),
- dependency.getScope(),
+ transitiveScope( dependency.getScope(), scope ),
dependency.getType(),
dependency.getType() );
return artifact;
}
+
+ private String transitiveScope( String desiredScope, String artifactScope )
+ {
+ // TODO: scope handler
+ if ( Artifact.SCOPE_TEST.equals( artifactScope ) || Artifact.SCOPE_TEST.equals( desiredScope ) )
+ {
+ return Artifact.SCOPE_TEST;
+ }
+ else
+ {
+ return Artifact.SCOPE_RUNTIME;
+ }
+ }
}
1.42 +2 -1 maven-components/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
Index: DefaultPluginManager.java
===================================================================
RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -r1.41 -r1.42
--- DefaultPluginManager.java 7 Mar 2005 19:03:18 -0000 1.41
+++ DefaultPluginManager.java 8 Mar 2005 05:34:52 -0000 1.42
@@ -209,7 +209,8 @@
String version = "1.0-SNAPSHOT";
- Artifact pluginArtifact = new DefaultArtifact( "maven", artifactId, version, "plugin", "jar" );
+ Artifact pluginArtifact = new DefaultArtifact( "maven", artifactId, version, DefaultArtifact.SCOPE_RUNTIME,
+ "plugin", "jar" );
addPlugin( pluginArtifact, session );
}
1.24 +4 -6 maven-components/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
Index: MavenProject.java
===================================================================
RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/project/MavenProject.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- MavenProject.java 8 Mar 2005 01:51:20 -0000 1.23
+++ MavenProject.java 8 Mar 2005 05:34:52 -0000 1.24
@@ -177,7 +177,7 @@
Artifact a = (Artifact) i.next();
// TODO: let the scope handler deal with this
- if ( a.getScope() == null || Artifact.SCOPE_COMPILE.equals( a.getScope() ) )
+ if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) )
{
list.add( a.getPath() );
}
@@ -198,9 +198,8 @@
if ( isAddedToClasspath( a ) )
{
// TODO: let the scope handler deal with this
- if ( a.getScope() == null || Artifact.SCOPE_TEST.equals( a.getScope() ) ||
- Artifact.SCOPE_COMPILE.equals( a.getScope() ) ||
- Artifact.SCOPE_RUNTIME.equals( a.getScope() ) )
+ if ( Artifact.SCOPE_TEST.equals( a.getScope() ) || Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals(
+ a.getScope() ) )
{
list.add( a.getPath() );
}
@@ -222,8 +221,7 @@
if ( isAddedToClasspath( a ) )
{
// TODO: let the scope handler deal with this
- if ( a.getScope() == null || Artifact.SCOPE_COMPILE.equals( a.getScope() ) ||
- Artifact.SCOPE_RUNTIME.equals( a.getScope() ) )
+ if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) )
{
list.add( a.getPath() );
}
1.1 maven-components/maven-core/src/test/java/org/apache/maven/project/ProjectClasspathArtifactResolver.java
Index: ProjectClasspathArtifactResolver.java
===================================================================
package org.apache.maven.project;
/*
* Copyright 2001-2005 The Apache Software Foundation.
*
* Licensed 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.Artifact;
import org.apache.maven.artifact.MavenMetadataSource;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerNotFoundException;
import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.artifact.resolver.DefaultArtifactResolver;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import java.io.InputStreamReader;
import java.util.Set;
public class ProjectClasspathArtifactResolver extends DefaultArtifactResolver
{
private static class Source extends MavenMetadataSource
{
public Source( ArtifactResolver artifactResolver )
{
super( artifactResolver );
}
public Set retrieve( Artifact artifact, ArtifactRepository localRepository, Set remoteRepositories )
throws ArtifactMetadataRetrievalException
{
MavenXpp3Reader reader = new MavenXpp3Reader();
Model model = null;
try
{
String scope = artifact.getArtifactId().substring( "scope-".length() );
String name = "/projects/scope/transitive-" + scope + "-dep.xml";
model = reader.read( new InputStreamReader( getClass().getResourceAsStream( name ) ) );
}
catch ( Exception e )
{
throw new ArtifactMetadataRetrievalException( e );
}
return createArtifacts( model.getDependencies(), artifact.getScope(), localRepository );
}
}
public Artifact resolve( Artifact artifact, Set remoteRepositories, ArtifactRepository localRepository )
throws ArtifactResolutionException
{
return artifact;
}
protected void setLocalRepositoryPath( Artifact artifact, ArtifactRepository localRepository )
throws ArtifactHandlerNotFoundException
{
}
public ArtifactResolutionResult resolveTransitively( Set artifacts, Set remoteRepositories,
ArtifactRepository localRepository,
ArtifactMetadataSource source, ArtifactFilter filter )
throws ArtifactResolutionException
{
return super.resolveTransitively( artifacts, remoteRepositories, localRepository, new Source( this ), filter );
}
public ArtifactResolutionResult resolveTransitively( Set artifacts, Set remoteRepositories,
ArtifactRepository localRepository,
ArtifactMetadataSource source )
throws ArtifactResolutionException
{
return super.resolveTransitively( artifacts, remoteRepositories, localRepository, new Source( this ) );
}
public ArtifactResolutionResult resolveTransitively( Artifact artifact, Set remoteRepositories,
ArtifactRepository localRepository,
ArtifactMetadataSource source )
throws ArtifactResolutionException
{
return super.resolveTransitively( artifact, remoteRepositories, localRepository, new Source( this ) );
}
}
1.1 maven-components/maven-core/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
Index: ProjectClasspathTest.java
===================================================================
package org.apache.maven.project;
/*
* Copyright 2001-2005 The Apache Software Foundation.
*
* Licensed 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.MavenTestCase;
import org.apache.maven.artifact.Artifact;
import java.io.File;
import java.lang.reflect.Field;
import java.util.Iterator;
/**
* @todo relocate to maven-artifact in entirety
*/
public class ProjectClasspathTest extends MavenTestCase
{
private String dir = "src/test/resources/projects/scope/";
public void testProjectClasspath()
throws Exception
{
File f = getTestFile( dir + "project-with-scoped-dependencies.xml" );
// XXX: Because this test fails, we resort to crude reflection hacks, see PLX-108 for the solution
// assertEquals( ProjectClasspathArtifactResolver.class.getName(), getContainer().lookup( ArtifactResolver.ROLE ) );
MavenProjectBuilder builder = (MavenProjectBuilder) getContainer().lookup( MavenProjectBuilder.ROLE );
Field declaredField = builder.getClass().getDeclaredField( "artifactResolver" );
boolean acc = declaredField.isAccessible();
declaredField.setAccessible( true );
declaredField.set( builder, new ProjectClasspathArtifactResolver() );
declaredField.setAccessible( acc );
// XXX: end hack
MavenProject project = getProject( f, true );
Artifact artifact;
assertNotNull( "Test project can't be null!", project );
checkArtifactIdScope( project, "test", "test" );
checkArtifactIdScope( project, "compile", "compile" );
checkArtifactIdScope( project, "runtime", "runtime" );
checkArtifactIdScope( project, "default", "compile" );
// check all transitive deps of a test dependency are test scope
checkGroupIdScope( project, "test", "test" );
// check all transitive deps of a runtime dependency are runtime scope, except for test
checkGroupIdScope( project, "runtime", "runtime" );
// check all transitive deps of a compile dependency are runtime scope, except for test
checkGroupIdScope( project, "compile", "runtime" );
// check all transitive deps of a default dependency are runtime scope, except for test
checkGroupIdScope( project, "default", "runtime" );
}
private void checkGroupIdScope( MavenProject project, String scope, String scopeValue )
{
Artifact artifact;
String groupId = "maven-test-" + scope;
artifact = getArtifact( project, groupId, "scope-compile" );
assertEquals( "Check scope", scopeValue, artifact.getScope() );
artifact = getArtifact( project, groupId, "scope-test" );
assertEquals( "Check scope", "test", artifact.getScope() );
artifact = getArtifact( project, groupId, "scope-default" );
assertEquals( "Check scope", scopeValue, artifact.getScope() );
artifact = getArtifact( project, groupId, "scope-runtime" );
assertEquals( "Check scope", scopeValue, artifact.getScope() );
}
private void checkArtifactIdScope( MavenProject project, String scope, String scopeValue )
{
String artifactId = "scope-" + scope;
Artifact artifact = getArtifact( project, "maven-test", artifactId );
assertEquals( "Check scope", scopeValue, artifact.getScope() );
}
private Artifact getArtifact( MavenProject project, String groupId, String artifactId )
{
for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
{
Artifact a = (Artifact) i.next();
if ( artifactId.equals( a.getArtifactId() ) && a.getGroupId().equals( groupId ) )
{
return a;
}
}
fail( "Dependency " + artifactId + " not found" );
return null;
}
}
1.1 maven-components/maven-core/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml
Index: ProjectClasspathTest.xml
===================================================================
<plexus>
<components>
<component>
<role>org.apache.maven.artifact.ArtifactResolver</role>
<implementation>org.apache.maven.project.ProjectClasspathArtifactResolver</implementation>
</component>
</components>
</plexus>
1.1 maven-components/maven-core/src/test/resources/projects/scope/project-with-scoped-dependencies.xml
Index: project-with-scoped-dependencies.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<project>
<groupId>maven</groupId>
<artifactId>maven-project-test</artifactId>
<name>Maven</name>
<version>1.0-beta-9</version>
<dependencies>
<dependency>
<groupId>maven-test</groupId>
<artifactId>scope-default</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>maven-test</groupId>
<artifactId>scope-test</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>maven-test</groupId>
<artifactId>scope-runtime</artifactId>
<version>1.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>maven-test</groupId>
<artifactId>scope-compile</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
1.1 maven-components/maven-core/src/test/resources/projects/scope/transitive-compile-dep.xml
Index: transitive-compile-dep.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<project>
<groupId>maven-test</groupId>
<artifactId>scope-compile</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>maven-test-compile</groupId>
<artifactId>scope-default</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>maven-test-compile</groupId>
<artifactId>scope-test</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>maven-test-compile</groupId>
<artifactId>scope-runtime</artifactId>
<version>1.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>maven-test-compile</groupId>
<artifactId>scope-compile</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
1.1 maven-components/maven-core/src/test/resources/projects/scope/transitive-default-dep.xml
Index: transitive-default-dep.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<project>
<groupId>maven-test</groupId>
<artifactId>scope-default</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>maven-test-default</groupId>
<artifactId>scope-default</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>maven-test-default</groupId>
<artifactId>scope-test</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>maven-test-default</groupId>
<artifactId>scope-runtime</artifactId>
<version>1.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>maven-test-default</groupId>
<artifactId>scope-compile</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
1.1 maven-components/maven-core/src/test/resources/projects/scope/transitive-runtime-dep.xml
Index: transitive-runtime-dep.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<project>
<groupId>maven-test</groupId>
<artifactId>scope-runtime</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>maven-test-runtime</groupId>
<artifactId>scope-default</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>maven-test-runtime</groupId>
<artifactId>scope-test</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>maven-test-runtime</groupId>
<artifactId>scope-runtime</artifactId>
<version>1.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>maven-test-runtime</groupId>
<artifactId>scope-compile</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
1.1 maven-components/maven-core/src/test/resources/projects/scope/transitive-test-dep.xml
Index: transitive-test-dep.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<project>
<groupId>maven-test</groupId>
<artifactId>scope-test</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>maven-test-test</groupId>
<artifactId>scope-default</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>maven-test-test</groupId>
<artifactId>scope-test</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>maven-test-test</groupId>
<artifactId>scope-runtime</artifactId>
<version>1.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>maven-test-test</groupId>
<artifactId>scope-compile</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
1.82 +1 -3 maven-components/maven-model/maven.mdo
Index: maven.mdo
===================================================================
RCS file: /home/cvs/maven-components/maven-model/maven.mdo,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -r1.81 -r1.82
--- maven.mdo 7 Mar 2005 23:02:43 -0000 1.81
+++ maven.mdo 8 Mar 2005 05:34:52 -0000 1.82
@@ -807,9 +807,7 @@
<version>4.0.0</version>
<description>The scope of the dependency - build, compile, test, runtime</description>
<type>String</type>
-<!-- TODO: set default value? see DefaultArtifact first
- <defaultValue>runtime</defaultValue>
--->
+ <defaultValue>compile</defaultValue>
</field>
</fields>
<codeSegments>
1.14 +5 -6 maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
Index: DefaultArtifactResolver.java
===================================================================
RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- DefaultArtifactResolver.java 7 Mar 2005 09:41:54 -0000 1.13
+++ DefaultArtifactResolver.java 8 Mar 2005 05:34:52 -0000 1.14
@@ -11,6 +11,7 @@
import org.apache.maven.artifact.resolver.transform.ArtifactRequestTransformation;
import org.apache.maven.wagon.TransferFailedException;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -19,6 +20,9 @@
import java.util.Map;
import java.util.Set;
+/**
+ * @todo get rid of {@link AbstractArtifactComponent} and then create an AbstractArtifactResolver that does the transitive boilerplate
+ */
public class DefaultArtifactResolver
extends AbstractArtifactComponent
implements ArtifactResolver
@@ -175,11 +179,7 @@
ArtifactMetadataSource source )
throws ArtifactResolutionException
{
- Set s = new HashSet();
-
- s.add( artifact );
-
- return resolveTransitively( s, remoteRepositories, localRepository, source );
+ return resolveTransitively( Collections.singleton( artifact ), remoteRepositories, localRepository, source );
}
@@ -242,7 +242,6 @@
try
{
- // TODO: need to convert scope compile -> runtime using scope handler
referencedDependencies = source.retrieve( newArtifact, localRepository, remoteRepositories );
}
catch ( ArtifactMetadataRetrievalException e )
1.4 +2 -1 maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/AbstractArtifactComponent.java
Index: AbstractArtifactComponent.java
===================================================================
RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/AbstractArtifactComponent.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractArtifactComponent.java 1 Mar 2005 04:04:25 -0000 1.3
+++ AbstractArtifactComponent.java 8 Mar 2005 05:34:52 -0000 1.4
@@ -23,6 +23,7 @@
import org.codehaus.plexus.logging.AbstractLogEnabled;
/**
+ * @todo refactor away
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
* @version $Id$
*/
1.7 +1 -2 maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
Index: DefaultArtifact.java
===================================================================
RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- DefaultArtifact.java 7 Mar 2005 23:02:43 -0000 1.6
+++ DefaultArtifact.java 8 Mar 2005 05:34:52 -0000 1.7
@@ -57,7 +57,6 @@
/** @todo this should be replaced by type handler */
public DefaultArtifact( String groupId, String artifactId, String version, String type, String extension )
{
- // TODO: default should be runtime, except in currently building POM where it is compile.
this( groupId, artifactId, version, SCOPE_COMPILE, type, extension );
}