Hi all,
For some months, Antoine Duprat, Benoit Tellier and myself are working
daily on James 3.
We tried hard to make our development workflow as simple as possible.
One thing that's very annoying right now is that James is composed of
several git repositories.
We tried to use "git submodule" to aggregate all James modules into a
parent project. You can see it by yourself here :
https://github.com/linagora/james-parent
Everything would be ok if James were mature enough to make changes in a
single repository for most fixes and improvements.
Our experience is that we almost always change several repositories for
a task : adding a test to MPT tests often leads to some fixes in other
modules, adding an implementation for an interface requires some spring
configuration in the main repository, even a maven dependency in a given
repository often breaks other modules when putting everything together.
With the current layout, our workflow contains some tricky tasks :
x to create a "global branch", we create a branch for every
repository, a branch for james-parent, then we have to commit everything
for james-parent to point to the right version of submodules.
x for every single commit, we need to commit james-parent too in order
to follow submodule revision
x We need several Pull-Requests for a single task, that makes it hard
to reason about changes and it must be applied in the right order
x Branch merging is painful too
While discussing in JIRA
(https://issues.apache.org/jira/browse/JAMES-1588), Eric asked me to
come with a proposal about merging some James repositories together and
ask for feedback about Pros and Cons.
To start, here is the repositories needed to build James :
jdkim
jsieve
jspf
mime4j
james-project
james
mailbox
mailet
mpt
protocols
The first four are specialized modules and don't need to change with
James development IMO, so they can live in their own git repository.
The other 6 (7 if you count the JIRA-1588 proposed "backends"
repository) are very tied together and could be merged into a single git
repository with the following tree :
james-project
|---- james
|---- mailbox
|---- mailet
|---- mpt
|---- protocols
|---- backends
We should then make it clear on the website what is a "library" (jdkim,
jsieve, jspf, mime4j) dependency and what is a "server module"
(everything else).
Here is my opinions about this new organization :
Pro :
+ Faster dev for cross-module developments
+ Merge integration testing (MPT) to the main repository
+ Less build ordering issues when merging changes in two modules
+ Easier "Getting Start" (git clone, mvn compile)
+ Easier Tagging/Release
Con :
- Slower "mvn package"
- Every modules have to evolve accordingly to prevent build failure
Feel free to add your opinion to this proposal.
--
Matthieu Baechler
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org