Hi Stephane,
Thanks a lot for your comments. See below.
On Jun 12, 2007, at 9:56 PM, Stéphane Laurière wrote:
[snip]
Hi Vincent,
Sounds good to update the SVN structure for addressing the growing
complexity :-)
Here are below some questions and suggestions.
Vincent Massol wrote:
Hi,
Note: This email supercedes all my other proposals on the SVN
directory structure.
The rationale for this mail is that we're starting to have lots of
applications built on top of the xwiki platform: XWiki Enterprise
(default wiki), XEM, Watch, Curriki, Chronopolys, etc. We need to
accomodate them in our directory structure.
Top level structure
===============
/svnroot/xwiki/
|_ xwiki-platform/
|_ xwiki-applications/
|_ xwiki-enterprise/
|_ xwiki-enterprise-manager/
|_ xwiki-watch/
|_ curriki/
|_ chronopolys/
|_ xwiki-extensions/
|_ xwiki-eclipse/
|_ xwiki-concerto/
|_ sandbox/
where:
* xwiki-platform is the xwiki platform on which all the
applications are built.
* xwiki-applications are applications that extend the platform
with: skins, xwiki pages (XAR), plugins
* xwiki-enterprise is the name of our previously known "default
wiki" application.
* xwiki-extensions are any other extensions of xwiki not fitting
in xwiki-applications. For example the XWiki Eclipse integration,
etc. I've put concerto there but I'm not sure what it'll look like.
Definition of xwiki-platform
=====================
/svnroot/xwiki/xwiki-platform/
|_ tools/
|_ core/ (JAR)
|_ plugins/ (JARs)
|_ skins/ (ZIPs)
|_ dodo/
|_ finch/
|_ albatross/
|_ web/ (WARs)
|_ gwt/
|_ standard/
|_ xarlets (XARs)
|_ selenium/
|_ blog/
|_ calendar/
|_ ...
where:
* tools/ contains tools used to build the platform and xwiki
applications
If they are used both by the platform and the applications,
shouldn't we
put the "tools" folder at the root level (/svnroot/xwiki/tools/)?
The xwiki-applications all depend on the platform. I was viewing the
platform as providing the core infrastructure be it at runtime or at
build time.
Regarding the xarlets: why should they be considered
as part of the
platform? They build upon the platform, but they are rather extensions
of the platform than part of it, aren't they?
They are reusable xarlets and as such, like plugins or component
jars, they can be reused by the xwiki applications.
Maybe our differences of view is that you view the platform as only
JARs whereas I view the platform as providing all the pieces required
by applications to be built upon (build tools, components, UI pieces,
etc). Application are end products for me.
I have also this question: should we really
distinguish in the
structure
between the concepts of plugins, xarlets and xwiki-applications?
They are different right now. In the future, hopefully everything
will be a component.
They
have a different nature indeed, but won't splitting them into
different
folders make the life of developers more complex? If I write a
BlogTrackBackPlugin that does some specific stuff with blogs, where
will
I put it in the repository? It should probably go to the "blog
xarlet",
which then contains xwiki-documents + Java classes. Isn't it likely
that
our xarlets, or at least some of them will evolve to full-fledged
"applications" that will use all the XWiki concepts? Along the same
lines, won't we have plugins that will have their xwiki-documents?
Stephane I think you're jumping ahead about 6 months to 1 year... ;)
This is indeed what we want but we're far from there and the
structure I'm proposing is for now with the ability to evolve to
something else in the future. Right now it means these blogging
features will be split between xwiki-platform/plugins/blog and xwiki-
platform/xarlets/blog.
Regarding the evolution, 2 possibilities:
- the blogging features are components meant to be reused by
applications. In this case they can go in the platform which will
then offer blogging features for applications
- the blogging features are not meant to be reusable and embedded in
xwiki applications. They form a standalone blogging application and
should be located in xwiki-applications.
If I follow your direction, then everything is potentially an
application and the platform becomes the core. I'm viewing the
platform as core + reusable components and I differentiate between
reusable components and end applications (products if you prefer). I
wouldn't mind:
xwiki/
|_ xwiki-core/
|_ xwiki-components/ (or whatever you want to call it)
|_ xwiki-applications/
But my preference currently goes to what I proposed:
xwiki/
|_ xwiki-platform/
|_ xwiki-core/
|_ xwiki-components/
|_ xwiki-applications
If this happens, we can of course let the xarlet
become an application
and move it in the repository, but we may then consider putting
plugins
and xarlets in the xwiki-application folder, and distinguish
between the
following concepts not at the repository structure level but only
at the
deployment API and configuration levels:
1) application that contains only documents ("xarlet"): can be
installed
on any xwiki instance
2) application that contains plugins and possibly other Java classes,
and possibly some xwiki documents (could be dubbed "xwiki
application",
"xwiki plugin" or "xwiki extension"?): can be installed on any xwiki
instance, but it requires a restart of the application server
3) application that contains Java classes, xwiki documents and other
contents: need specific deployment. -> "xwiki product"?.
What do you think?
I've put 1) in xwiki-platform/ and 3) in xwiki-applications/. For 2),
my proposal also puts them in 1) as they are reusable pieces.
Regarding the extensions you mention: I don't
understand why we
wouldn't
consider xwiki-eclipse as part of the platform: how is it different
from
the /xwiki-platform/web/gwt?
web/gwt is offering an API for developing applications. The IDE
extension is a client/application using the XWiki API. It's not like
we're offering an Eclipse API for people to build Eclipse
applications that interact with XWiki.
Here 's a modified tree to summarize my
suggestions:
xwiki-platform
==============
/svnroot/xwiki/xwiki-platform/
|_ core for now
|_ xwiki-model, xwiki-storage etc. in the future
|_ webapp
|_ gwt
|_ standard
|_ xwiki-platform-ui (the components below may be moved to the
component level in the future, i.e. would be at the same level as
xwiki-model etc.)
|_ eclipse-ui
|_ flex-ui
|_ xul-ui
|_ web-ui-standard
|_ templates
|_ skins
|_ gwt
Re the UIs I'm fine but I think we should wait till we have more UIs
before creating a deep structure. For now we only have web UIs which
is why I put the web/ directory.
|_ plugins: only the platform core plugins: image,
packaging,
fileupload, zipexplorer, but not: flickr, graphviz, ...
Where would you put the flickr/ and graphviz/ plugins? I'd still put
them in xwiki-platform as they are reusable for xwiki-applications.
xwiki-applications
==================
/svnroot/xwiki/xwiki-applications/
|_ xwiki-blog
|_ wiki
xwiki-blog is not an application. It's not runnable. It's a component
that can be integrated into an application.
For me the definition of an Application is:
* A set of plugins
* A set of components (JARs)
* A set web pages (velocity templates, etc)
* A set of xwiki documents in a database
* All this inside a configured container
* An application distribution is a zip/exe/tar.gz
I'd agree with xwiki-blog as an application if we were delivering a
standalone blogging application but that's not the purpose of the
blog xarlet (it's meant to be used as a component by xwiki
applications) as it exists as we're not making a product out of it
(at least no yet).
|_ xwiki-calendar
|_ plugins/
|_ com.xpn.xwiki.plugins.CalendarPlugin
|_ wiki/
Same as for the blog.
|_ xwiki-enterprise-manager
|_ wiki
|_ web
|_ distribution
|_ xwiki-watch
|_ xwiki-concerto
[snip]
Thanks for this interesting POV! :)
Let's see what Sergiu, Ludovic and the others say.
Thanks
-Vincent