You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Jason van Zyl (JIRA)" <ji...@codehaus.org> on 2009/12/27 16:13:56 UTC

[jira] Updated: (MNG-4039) Allow plugins the chance to alter the project artifacts/dependencies during 'resolution phase'

     [ http://jira.codehaus.org/browse/MNG-4039?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jason van Zyl updated MNG-4039:
-------------------------------

    Fix Version/s:     (was: 3.0-alpha-6)
                   3.x

> Allow plugins the chance to alter the project artifacts/dependencies during 'resolution phase'
> ----------------------------------------------------------------------------------------------
>
>                 Key: MNG-4039
>                 URL: http://jira.codehaus.org/browse/MNG-4039
>             Project: Maven 2 & 3
>          Issue Type: New Feature
>          Components: Dependencies, IDEs, Plugin API, Plugins and Lifecycle, POM
>    Affects Versions: 3.0-alpha-2
>         Environment: n/a
>            Reporter: Steve Ebersole
>            Assignee: Jason van Zyl
>             Fix For: 3.x
>
>
> The term 'resolution phase' was taken from an email on this subject : http://www.nabble.com/Re%3A-Programmatically-adding-dependencies-to-a-MavenProject-p21668701.html
> Basically, there are times when a plugin could add dependencies to the project dependency tree in an effort to alleviate the project pom developer from unnecessary ugliness.  My particular use-case is very fitting imo.  In trying to write a plugin for antlr's gunit functionality.  gUnit is a mechanism for generating JUnit tests for testing antlr grammars; it uses an antlr grammar itself to describe the tests.  Typically, a project using antlr3 is going to define a dependency on the org.antlr:antlr-runtime artifact, since that artifact contains all the classes needed to utilize antlr in the runtime as well as all that need to be exposed via transitive dependencies.  However, during build-time, a project using antlr is also going to need access to the org.antlr:antlr artifact which defines all the classes needed for grammar -> java-class transformations.  As an "anti-example", currently the antlr3 plugin handles this by defining a "hard dependency" to a particular version of org.antlr:antlr in its pom even if that version is a mismatch from the one used by the project.  Wouldn't it be great if the plugin were allowed to be smart enough to say "hey, the project to which I am attached is using org.antlr:antlr-runtime:3.1.0 so i really should be using org.antlr:antlr:3.1.0 for grammar transformation"?  And in the case of the antlr3 plugin it actually can do this already because it does not need to muck with any of the project classpaths in order to do this.  But in the case of this gunit example, that is not the case.  As I said, gunit generates JUnit test classes which should then get picked up by the normal surefire mechanism and executed.  The issue is that these gunit-generated JUnit classes have dependencies on gunit classes, so gunit must be available on the test compilation classpath.  Following along with the discussion above, it would be fantastic if the plugin could handle all these details for the project and prepare the classpath properly.
> One possibility for implementing this is a new method on org.apache.maven.plugin.Mojo.  Another is a new optional mojo interface like org.apache.maven.plugin.DependencyContributingMojo

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira