You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Wendy Smoak (JIRA)" <ji...@codehaus.org> on 2011/05/25 03:06:22 UTC

[jira] Issue Comment Edited: (MNG-5104) Enforcing build order...

    [ http://jira.codehaus.org/browse/MNG-5104?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=268373#action_268373 ] 

Wendy Smoak edited comment on MNG-5104 at 5/24/11 8:06 PM:
-----------------------------------------------------------

It sounds like you want help enforcing your architecture.  You might look at tools like http://www.coverity.com/html/architecture-analyzer-for-java.html .

Meanwhile, bring this up on the mailing list to see if anyone else thinks this would be useful. Figuring out the build order by using the dependencies is part of the Maven magic and I'm not sure there'd be much support for turning it off.

      was (Author: wsmoak):
    It sounds like you want help enforcing your architecture.  You might look at tools like http://www.coverity.com/html/architecture-analyzer-for-java.html .

Meanwhile, bring this up on the mailing list to see if anyone else thinks this would be useful. Figuring out the build order by using transitive dependencies is part of the Maven magic and I'm not sure there'd be much support for turning it off.
  
> Enforcing build order...
> ------------------------
>
>                 Key: MNG-5104
>                 URL: http://jira.codehaus.org/browse/MNG-5104
>             Project: Maven 2 & 3
>          Issue Type: Improvement
>          Components: Bootstrap & Build, Reactor and workspace
>    Affects Versions: 2.2.1
>         Environment: Linux AMD64
>            Reporter: Ancoron Luciferis
>
> Currently, building multi-module aka. reactor projects is working, but does not help the developers to ensure a certain level of isolation of their modules.
> E.g. imagine the following project tree:
> * <root>
> ** Component A
> *** A.api
> *** A.jpa
> *** A.ejb (depends on A.api, A.jpa)
> ** Component B
> *** B.api
> *** B.jpa
> *** B.ejb (depends on B.api, B.jpa, A.api)
> ** Component C
> *** C.api
> *** C.jpa
> *** C.ejb (depends on C.api, C.jpa, A.api)
> ...and all things are just fine.
> Now, some developer comes in, not fully aware of the "big picture", producing something like this:
> * <root>
> ** Component A
> *** A.api
> *** A.jpa (depends on B.jpa)
> *** A.ejb (depends on A.api, A.jpa)
> ** Component B
> *** B.api
> *** B.jpa
> *** B.ejb (depends on B.api, B.jpa, A.api, C.ejb)
> ** Component C
> *** C.api
> *** C.jpa
> *** C.ejb (depends on C.api, C.jpa, A.api)
> ...so in an old-school build with tools like Ant this would fail to build as the build order is clear and strict, according to best-practices. Not so with Maven. In the first case Maven might (although unlikely and yet to be seen) come up with a clear build order like this:
> # <root>
> # Component A
> # A.api
> # A.jpa
> # A.ejb
> # Component B
> # B.api
> # B.jpa
> # B.ejb
> # Component C
> # C.api
> # C.jpa
> # C.ejb
> ...however, in the second case Maven will not fail to build and instead come up with something like this:
> # <root>
> # Component A
> # A.api
> # Component B
> # B.jpa
> # A.jpa
> # A.ejb
> # B.api
> # Component C
> # C.api
> # C.jpa
> # C.ejb
> # B.ejb
> All artifacts are build correctly, but it is no longer guaranteed that e.g. "Component A" could be used without "Component B", therefore introducing a requirement and eventually a lot of changes to the build-/tool-/test-chain.
> So we would like to have an option to disable the Maven "magic" here and just stupidly build according to the {{<module>}} tags we've carefully written.

-- 
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