[ http://jira.codehaus.org/browse/MPMULTIPROJECT-55?page=all ]
Brett Porter updated MPMULTIPROJECT-55:
---------------------------------------
Assign To: (was: Brett Porter)
> Example more generic usage multiproject goals.
> ----------------------------------------------
>
> Key: MPMULTIPROJECT-55
> URL: http://jira.codehaus.org/browse/MPMULTIPROJECT-55
> Project: maven-multiproject-plugin
> Type: Improvement
> Versions: 1.4.1
> Environment: Not of importance.
> Reporter: Davy Toch
>
>
> One of the problems I have with Maven 1 (currently using maven-1.1-beta-1) is
> knowing which goals can be executed on a certain project depends on the
> project type. For example if the project is of type 'jar', then jar:install
> should be called, while for a project of type 'ejb', ejb:install should be
> called. To avoid that the developer needs to know this, it is possible to
> create a custom maven.xml file. This could then include a goal 'install' that
> calls 'jar:install' for projects of type 'jar' and 'ejb:install' for projects
> of type 'ejb'. This way the developer could always call 'install',
> independent of the current project type. This is also more consistent with
> the approach of most IDE's (Eclipse, JBuilder, ...) where independent of
> project type, the tasks to call are build, rebuild, clean, ....
> However, the above approach would need a custom maven.xml file. In order to
> avoid this, I had a look at the multiproject plugin that already has generic
> goals (e.g. multiproject:artifact, multiproject:install, ...).
> On the website of the multiproject plugin they propose e.g.
> A. create a kind of 'master' project from which subprojects can inherit the
> POM configuration
> This master project has the following properties:
> maven.multiproject.basedir=..
> maven.multiproject.includes=*/project.xml
> maven.multiproject.excludes=master/project.xml
> Remark that with the above configuration the 'master' project has to be
> present in a folder 'master' that is on the same level as its subprojects.
> This flat project structure approach is chosen to avoid problems with the
> Eclipse IDE.
> B. different subprojects are defined on the same level as the 'master'
> project with the following property:
> maven.multiproject.type=jar (or ejb, war, ear, ...)
> This way you can e.g. call multiproject:artifact in the master project that
> will automatically call the necessary goal in the subprojects (jar:jar,
> ejb:ejb). However, if you only want to create the artifact for one
> subproject, you should go to the subproject and call jar:jar, ejb:ejb, ....
> Therefore the name of the goal to call is again different.
> A solution for this I have thought of is : define each Maven project as a
> multiproject, meaning that for the subprojects in B., the following
> properties are also defined (but with different values then in A.):
> maven.multiproject.basedir=${basedir}
> maven.multiproject.includes=project.xml
> maven.multiproject.excludes=
> On the other hand it is also useful to define the following in the master
> project:
> maven.multiproject.type=master
> With the above configuration you can:
> - call multiproject:artifact in the 'master' project : will generate all
> artifacts of the subprojects
> - call multiproject:artifact in a subproject : will generate the artifact for
> the subproject
> - ...
> Unfortunately, on
> http://maven.apache.org/reference/plugins/multiproject/properties.html the
> following is stated about the property maven.multiproject.includes:
> "The 'top-level' project that you use to run maven multiproject must not be
> included in the set of projects to be processed."
> Question : why this restriction?
> Remarks :
> 1. My multiproject approach has the following restrictions/problems:
> - only subprojects of the 'master' project should create artifacts, not the
> 'master' project itself (the master project is only used to avoid POM
> configuration duplication)
> - the master project can't inherit from another project itself
> - the subprojects are the base leaves in the inheritance tree, meaning that
> no other projects can inherit from the subprojects
> - reactor is always called
> - not fully tested when calling the goals to create the website
> - other problems?
> 2. Having maven.multiproject.type=master defined in the 'master' project is
> e.g. useful when working in Eclipse, because calling the generic goal
> multiproject:goal on the master project only calls the goal on the
> subprojects. However, if you want to work with your projects in Eclipse, you
> should also be able to generate the Eclipse project files (.classpath, ...)
> for the master project because otherwise you won't be able to call Maven
> goals on the master project from the Eclipse IDE. With
> maven.multiproject.type=master, you can have a custom goal
> 'generate-eclipse-files' (or similar) in a script maven.xml:
> <goal name="generate-eclipse-files">
> <j:set var="type"
> value="${context.getVariable('maven.multiproject.type')}"/>
> <attainGoal name="eclipse"/>
> <!--
> If the current project type is 'master', then the eclipse goal should
> also be called on the subprojects.
> -->
> <j:if test="${type == 'master'}">
> <attainGoal name="multiproject:goal">
> <j:set var="goal" value="eclipse"/>
> </attainGoal>
> </j:if>
> </goal>
> This goal is generic and can thus be put in 'master' projects or subprojects,
> so my intent is satisfied: minimize custom scripting in maven.xml and if
> scripting is really necessary, make it as generic as possible. On the other
> hand, I think it would be easy to create a goal multiproject:run-goal-on-all
> in the maven multiproject plugin that is similar to multiproject:goal but
> that can run the goal on the parent project as well. This would avoid having
> to write a custom script maven.xml.
> Regards,
> Davy Toch
--
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
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]