Details

    • Complexity:
      Intermediate
    • Number of attachments :
      2

      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:

      1. copy/paste duplication
      2. 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.

        Issue Links

          Activity

          Hide
          Tony Lampada added a comment -

          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

          Show
          Tony Lampada added a comment - 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 MNG-5127 http://stackoverflow.com/questions/11749375/import-maven-plugin-configuration-by-composition-rather-than-inheritance-can-it http://stackoverflow.com/questions/10245621/how-to-inherit-from-a-multimodule-maven-project-with-all-its-goodies
          Hide
          Tony Lampada added a comment -

          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!

          Show
          Tony Lampada added a comment - 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!
          Hide
          Roman Arkadijovych Muntyanu added a comment -

          If I'm not mistaken, dependencies mix-ins are implemented as "Grouping Dependencies" ( see http://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom-best-practice.html ).
          Is it possible to extend "pom" packaging behaviour beyond dependencies-only? (so that properties, plugin and dependency management sections also became part of the pom depending on mix-in)

          Show
          Roman Arkadijovych Muntyanu added a comment - If I'm not mistaken, dependencies mix-ins are implemented as "Grouping Dependencies" ( see http://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom-best-practice.html ). Is it possible to extend "pom" packaging behaviour beyond dependencies-only? (so that properties, plugin and dependency management sections also became part of the pom depending on mix-in)
          Hide
          james strachan added a comment -

          this looks like a possible implementation on 3.x https://github.com/repaint-io/maven-tiles

          Show
          james strachan added a comment - this looks like a possible implementation on 3.x https://github.com/repaint-io/maven-tiles
          Hide
          Christoph Henrici added a comment - - edited

          great, https://github.com/repaint-io/maven-tiles certainly looks like what we need .... i ll try this ..great thx for sharing!!

          Show
          Christoph Henrici added a comment - - edited great, https://github.com/repaint-io/maven-tiles certainly looks like what we need .... i ll try this ..great thx for sharing!!

            People

            • Assignee:
              Unassigned
              Reporter:
              Anthony Whitford
            • Votes:
              53 Vote for this issue
              Watchers:
              48 Start watching this issue

              Dates

              • Created:
                Updated: