On 16 March 2010 03:08, Ron Wheeler <rwhee...@artifact-software.com> wrote:
> Phil Housley wrote:
>>
>> On 15 March 2010 22:29, Ron Wheeler <rwhee...@artifact-software.com>
>> wrote:
>>
>>>
>>> Am I missing something?
>>>
>>> There seem to be a lot of people who try to incorporate jar projects into
>>> master projects and deploy with the "Big Bang" Theory - Get everything
>>> "all
>>> right" and deploy the whole mess.
>>>
>>> They seem to generate a lot of problems for themselves.
>>>
>>> Is it not a better idea to build projects for your libraries separately,
>>> test them, deploy them on their own and then use them as dependencies in
>>> the
>>> same way that one uses dependencies from third parties?

>> You are generally right about the best practice - modular development
>> is almost always a good idea, but I doubt you would find a way to
>> significantly cut down on the traffic here, as there are definitely a
>> lot of special cases, as I know only too well.
>
> I would like to know what they are.

Well, my example recently was a multi-module project where there is
simply no concept of deploying a single module - the whole thing is
required be pushed together, but as separate artifacts to the same
place, rather than the standard method of wrapping up everything into
one output artifact.  Other things I have had to do in the past
include horrible variant builds for different app servers.  Creating
self contained runnables for different systems is another fairly
common but very varied issue (scripts/shaded jars/etc.)  None of these
are about creating generally reusable libraries, but they are all
software build use cases.

>> Also, managing lots of completely independent pieces of code is hard
>> work.  Even Maven itself is several modules combined into a project,
>> so that a single command can build/deploy lots of pieces at once.
>> When synchronizing releases across modules, this is really an obvious
>> win.
>
> We have to manage about 80 3rd part libraries and we have started to
> accumulate our own libraries into projects that we have to manage and
> synchronize with deliverables.
> It requires a bit of brain power(self discipline) but does not require a
> special maven plug-in.
> We use proper version control with snapshots and releases.

I hope that by now most heavy Maven users think like this, there is
hopefully enough documentation to encourage it.  However, building
applications is not the same as creating libraries.  We maintain a
pile of libraries, and go through all the mass of branching and
tagging required (with release plugin help) to look after lots of
separate releases, but then there are projects which are always
synchronized, so the pieces are kept together, through trunk -> branch
-> tag (think like the central parts of Maven, which I notice are
actually built partly with Ant.)

>> There are some definite patterns that Maven makes work well, and maybe
>> collecting these together would be help to people.  For example, the
>> pattern of project/{core,web-app,cli-app}, or
>> project/{ejbs,utils,web-app,ear-app}.
>
> I was hoping to get a comprehensive list of standard products based on my
> initial list.
> There can not be too many things that people want to build.

I think there are a lot more things than I would like to imagine, but
a list of common patterns, or possibly of meta-patterns, would be no
bad thing.

>> And indeed considering these patterns can help with abstracting out
>> some other cases, but there will always be some things that will be
>> more complicated.  My case involves something like one of the above
>> patterns, but with custom deployment requirements, and several new
>> packaging types, it can't be made to map neatly into a simple "build
>> the parts, then assemble" pattern - so I came here and asked for help.
>
> What sort of custom deployment and package types. Can you elaborate a bit
> further?

I don't want to repeat myself here, as that would drag this thread off
topic some way, but basically the situation is several modules which
are logically independent (can be built independently) but must be
deployed as a single unit, i.e. they have no general use outside the
project.  The modules are built with a custom lifecycle, and
deployment is a custom process to upload to a tracker.   A
multi-module build would be the logical way to proceed, so that the
entire release can be built and deployed together, but multimodule
means <packaging>pom</packaging>, and so no option of a custom
lifecycle, and so it would be incorrect to invoke "mvn deploy", even
though that sounds like the right command.

None of this seems that complicated, but it is an edge case that it
turns out Maven can't directly handle.

> This is a good place to ask for help since the quality and depth of
> expertise is a very good.
>
> I just have this nagging feeling that a lot of the responses are direct
> responses to the question asked rather than guidance towards "Best
> Practices" that might be much better answers in the long run.

Have to agree about the first part, and on the second to some extent
too, but I think really you would just be getting the all round
benefits that come with increasing user documentation, rather than a
magic bullet.  That doesn't stop it a being a good idea though.

>>>
>>> Ron

-- 
Phil Housley

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

Reply via email to