I like Matthieu proposal (merge without mime4...), but this will open the door to more refactoring that would maybe go against the initial requirement of being able to embed some mailbox without the full server.

Maybe we should write to guidelines we can refer when working in that single repository, otherwise we will have endless discussions that don't occur for now simply because code live in separate projects.

On 2015-09-01 19:19, Stephen Brewin wrote:
Hi Benoit

There appears to be consensus that our project layout should be
refactored along the lines suggested by Matthieu. You seem to be
suggesting that we go further, which I believe we should hold off on.

With Matthieu's refactored structure a mulit-module Maven build that
uses a BOM (a bill-of-materials POM) will solve the majority of
problems. Then we can look at how to solve the remaining edge cases.

Personally I use Eclipse while you use IntelliJ, both of which integrate
with Maven and support multi-module projects. In my day job we have much
more complex multi-module projects than is proposed for James and have
no problems developing using Eclipse/Maven and with CI using Jenkins.

There should be no need for manual builds and installation of .jars.
These are signs of a Maven anti-pattern fixable with the appropriate
Maven multi-module structure or a misunderstanding of the Maven
development process.

Certainly I am not in favour of merging modules at this stage. As
explained in an earlier post, this breaks an intent of the James
project, plus it has yet to be shown to be beneficial under Matthieu's
refactored structure.

Sometimes it is best to take baby steps. I believe this is the case here.

Cheers
--Steve

On 01/09/2015 13:29, Benoit Tellier wrote:
For me this is a +1.

I think there is several issue with today organization :



 - Some projects are not really separated. For instance, if I want to
add QUOTA support, I will modify Mailbox interfaces, but also change
things in protocols.



 - Having separated modules that are eavily changed makes build hard.
Today, you can either :
      - build manually each projects in the correct order and install
the given jar in your .m2 repository. This is long, error prone, and
not documented.
      - develop or rely on third party projects for aggregating this (
what we have done in james-parent ). This is not part of the Apache
project so relying on it seems strange to me. Moreover this tool is
designed for our needs ( our James with a Cassandra back-end ), with
tools we like ( docker ).
   I think both of these options are not the good ones. We easily see
that modules like protocols, james, mailbox and mpt can't be built
separately.



 - Work-flow is hard. Before starting working with Antoine and
Matthieu I was working on a PoC for IMAP quota, modifying mailbox and
protocols project on separated intelliJ instances. Each time I
modified something in mailbox, I needed to compile it, install it with
maven and reload maven in the protocol project, slowing me down a lot.



 - Apache CI is broken. Quite normal as building James is not trivial.



 - Library version can easily diverge between projects. It may be
unseen at compile time and with unit test but can cause serious
problems at runtime. Each time we modify a library version, we have to
modify it on each other James projects. This is error prone.



 - Finally, there is the issue that started this thread. There might
be duplication between mailbox code and james-server-data-* one. In
the Cassandra example, we developed tools for creating tables, index,
custom types... That we want to use in both the cassandra-mailbox and
james-server-data-cassandra. We don't want to duplicate it, we don't
want dependencies between both projects. The only solution with
separated projects is to introduce an other separated project
introducing these tools ( what we started to develop ). This is not a
separated case : We can have uses of messages queue in several places
: mailqueue, mailbox event system, ... .



Merging modules together (mailbox, james, protocols and mpt for me )
solves all these issue elegantly and makes it easier to contribute to
James.

Le 01/09/2015 11:29, Stephen Brewin a écrit :
On 01/09/2015 08:18, Matthieu Baechler wrote:
Thank you for your answer Stephen. It looks like we agree one this
proposal.

Can I take your answer for a +1 ?
+1 for restructuring

We should discuss transitioning to GIT separately

--Steve

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org


--
Eric Charles http://datalayer.io

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to