Re: [m2] programmatic exclusion of a dependency

2006-01-25 Thread Jason van Zyl

Nigel Magnay wrote:

Hi people

I'm trying to produce a fix for the cobertura mojo. When it instruments the
code, it adds cobertura as a dependency to the projects 'test' cycle by
doing

   this.project.setDependencyArtifacts( set );
where the set has included the artifact cobertura-1.7 in the 'test' scope.

The problem is, is that the cobertura POM includes asm-2.1. This is a
dependency for running cobertura to *instrument* the code, but it is not a
dependency (and prevents it from working for hibernate projects) a
dependency at runtime.

I hoped I might be able to add a filter in order to prevent this happening -
however I think the bit where the filter is used
(DefaultPluginManager::resolveTransitiveDependencies) manually just creates
a ScopeArtifactFilter, so I have no opportunity to change it to something
that might scope out the dependency.

Am I barking up the wrong tree here, or is there a better way of trying to
do this?


This smells like a scoping problem. ASM is not required for test 
execution (runtime) by Cobertura, ASM is only needed for swizzling the 
class files and that part is run during the process-classes phase. 
Cobertura itself needs it to compile and to instrument but ASM shouldn't 
end up in the test or runtime scopes/classpaths. I think this points to 
a tool scope or something akin to it.


If that proves to be the case it's probably not going to be fixed for 
2.0.3.


A solution might be to add an artifact exclusion configuration to 
surefire (possibly only for forking mode). Then the lifecycle.xml for 
the Cobertura plug-in which controls the execution of surefire could 
exclude ASM during test runs. That could probably make it into the 
surefire plug-in's next release if that solution works. That's all I can 
think of off the top of my head.


I add this for you:

http://jira.codehaus.org/browse/MSUREFIRE-51

--

jvz.

Jason van Zyl
jason at maven.org
http://maven.apache.org

In short, man creates for himself a new religion of a rational
and technical order to justify his work and to be justified in it.

  -- Jacques Ellul, The Technological Society

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



[m2] programmatic exclusion of a dependency

2006-01-25 Thread Nigel Magnay
Hi people

I'm trying to produce a fix for the cobertura mojo. When it instruments the
code, it adds cobertura as a dependency to the projects 'test' cycle by
doing

   this.project.setDependencyArtifacts( set );
where the set has included the artifact cobertura-1.7 in the 'test' scope.

The problem is, is that the cobertura POM includes asm-2.1. This is a
dependency for running cobertura to *instrument* the code, but it is not a
dependency (and prevents it from working for hibernate projects) a
dependency at runtime.

I hoped I might be able to add a filter in order to prevent this happening -
however I think the bit where the filter is used
(DefaultPluginManager::resolveTransitiveDependencies) manually just creates
a ScopeArtifactFilter, so I have no opportunity to change it to something
that might scope out the dependency.

Am I barking up the wrong tree here, or is there a better way of trying to
do this?