[ https://jira.codehaus.org/browse/MPMULTIPROJECT-55?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael Osipov closed MPMULTIPROJECT-55. ---------------------------------------- Resolution: Won't Fix Please refer to https://cwiki.apache.org/confluence/display/MAVEN/The+Great+JIRA+Cleanup+of+2014 if you're wondering why this issue was closed out. > Example more generic usage multiproject goals. > ---------------------------------------------- > > Key: MPMULTIPROJECT-55 > URL: https://jira.codehaus.org/browse/MPMULTIPROJECT-55 > Project: Maven 1.x Multi-Project Plugin > Issue Type: Improvement > Affects 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 was sent by Atlassian JIRA (v6.1.6#6162)