Details
Description
I am looking for a way to mixin POM fragments into POMs. Note that this idea is beyond parent pom inheritance because all projects inherit from a corporate parent pom. The problem that I am running into is that the corporate parent pom is turning into an "everything but the kitchen sink" POM and I'd like to dissect it into POM fragments relevant for individual modules.
For example, I would like to have mixins for:
- Java projects (that include static code analysis plugins, javadoc, etc.)
- JPA projects (that include DDL generation)
- Flex projects (that include flexmojos, asdoc, etc.)
- Scala projects (that include the maven-scala-compiler plugin, scaladoc, etc.)
- JavaScript projects (that include build plugins like maven-yuicompressor-plugin with jslint and compress goals)
Hopefully, you get the idea. Without the ability to factor pom logic, we are left with two symptoms:
- copy/paste duplication
- complex "it does it all" parent poms (which slow down builds because more plugins are loaded even though they might not do anything material)
Note that a project may include multiple mixins as I could have a project that contains Java code, Scala code, and JavaScript.
Another idea is that the mixins could be parameterized, so that the ultimate pom can be customized based on the parameters (like tokens).
I recall reading about Mixins coming in Maven 3.1, but could not find any such issue to watch, so am creating one.
-
Hide
- daddy3.zip
- 02/Oct/12 3:01 PM
- 5 kB
- Tony Lampada
-
- daddy/tiles/pom.xml 0.5 kB
- daddy/tiles/kid-tile/pom.xml 0.9 kB
- daddy/tiles/girl-tile/pom.xml 0.9 kB
- daddy/tiles/boy-tile/pom.xml 0.9 kB
- daddy/pom.xml 0.7 kB
- daddy/boy/pom.xml 0.6 kB
- daddy/kid/pom.xml 0.6 kB
- daddy/README.txt 0.2 kB
- daddy/girl/pom.xml 0.6 kB
-
Hide
- maven-tiles.zip
- 24/May/11 3:07 AM
- 47 kB
- Maurizio Pillitu
-
- maven-tiles/examples/pom.xml 0.7 kB
- maven-tiles/examples/.../pom.xml 1.0 kB
- maven-tiles/examples/.../pom.xml 1 kB
- maven-tiles/examples/.../pom.xml 0.5 kB
- maven-tiles/examples/.../pom.xml 1 kB
- maven-tiles/examples/.../pom.xml 0.5 kB
- maven-tiles/examples/.../pom.xml 2 kB
- maven-tiles/examples/.../pom.xml 4 kB
- maven-tiles/examples/.../README.txt 0.6 kB
- maven-tiles/examples/.../tile/HomePage.html 2 kB
- maven-tiles/examples/.../tile/HomePage.java 0.5 kB
- maven-tiles/.../WicketApplication.java 0.6 kB
- maven-tiles/examples/.../log4j.properties 0.4 kB
- maven-tiles/examples/.../webapp/logo.png 12 kB
- maven-tiles/examples/.../webapp/style.css 1 kB
- maven-tiles/examples/.../WEB-INF/web.xml 1 kB
- maven-tiles/examples/.../tile/Start.java 2 kB
- maven-tiles/examples/.../TestHomePage.java 0.5 kB
- maven-tiles/examples/.../tile/HomePage.class 1 kB
- maven-tiles/examples/.../tile/HomePage.html 2 kB
- maven-tiles/.../WicketApplication.class 0.6 kB
- maven-tiles/examples/.../log4j.properties 0.4 kB
- maven-tiles/examples/.../tile/Start.class 2 kB
- maven-tiles/examples/.../TestHomePage.class 1.0 kB
- maven-tiles/.../maven-tiles-core.iml 3 kB
- maven-tiles/.../pom.xml 0.5 kB
- maven-tiles/.../README.txt 0.7 kB
- maven-tiles/.../TilesMavenLifecycleParticipant.java 5 kB
- maven-tiles/.../components.xml 0.8 kB
- maven-tiles/pom.xml 0.7 kB
Issue Links
- relates to
-
MNG-5173
Include other XML files from POM
-
Activity
I've been in greater need of this lately - I'll kick a discussion on the development list
Hi,
I've some code to share - tested on Maven 3.0.2 - which composes a Maven POM from different tiles; it's a spike of 2 days work, but I think results are very interesting.
The implementation consists of:
- an implementation of MavenLifecycleParticipant.java (120 lines)
- a components.xml
The attached ZIP file contains a Maven build to produce a JAR that needs to be copied in M2_HOME/lib, a README.txt and a working sample; there are still some issues (e.g. properties inheritance), which are reported in the README, but I think that it gives the idea.
I really hope this could help with this feature implementation.
Just to make sure there is an appropriate discussion on other points-of-view: as a consumer of different maven plugins/other projects there are times when each individual plugin/project requires a large amount of configuration within the pom (particularly third-party plugins). If mixin is intended to help mitigate this problem, great, just didn't want to assume without asking ![]()
Examples include the maven-gwt-plugin which requires a good amount of configuration, as well as Enunciate. Having those plugins be able to provide example mixin file that only focuses on their particular plugin will avoid a lot of merging problems that usually occur in sometimes very large pom.xml files.
Maurizio, your maven-tiles seems very promising.
Do you still use it today?
Have you made any improvements to it?
By using it, have you bumped into new problems that you haven't thought of?
How about making it into a github project, or something?
Use "import" scope; that's how you can define a POM for particular types of projects (see issue description) and then add those dependencies to your project. I would say the "import" scope is the Mixin you want.
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
@Tony
- Yes, I still use it sometimes, but being a customisation on the Maven distro (and not a plugin) it is really hard to distribute and build collaboration around it
- No improvements have been made so far
- As above, no changes were made, but probably the biggest issue right now is find a way to implement it as a Maven plugin
- I'm in, will create a github project in the weekend
@Paul, the Mixin feature aims to inherit <build> behaviours, not (only) dependencies. Read more here http://stackoverflow.com/questions/2456375/how-to-use-maven-3-mixins
Dunno.
IMO, import scope was a very important step for maven as it is a move towards the "favor composition over inheritance" design principle for poms.
However that limits using composition for project dependencies.
There's nothing that import scopes can do for me if I want to make a reusable piece of build behaviour, like for example, using the maven-dependency-plugin to unpack a few dependencies during the proccess-resources phase.
Please see
Now that maven-tiles has been successfully packed as an open source project,
I made a small project that demonstrates how, using maven-tiles, one can get the desired mixin behaviour.
See attached daddy3.zip
Thanks Maurizio!
yes, surprisingly there doesn't appear to be an issue for it, though lots of related ones. Adding to that version.