Hi,

Some more ideas after thinking about the build issues a bit more.

Directory layout
----------------

Roy is right in that the directory layout could do with some cleaning up. A proposal:

jackrabbit/
         ./api
         ./commons
         ./core
         ./applications
         ./xdocs
         ./subprojects
                 ./jcr-rmi
                 ./jcr-server
                 ./orm-persistence
                 ...
         ./contrib
                 ./examples
                 ./jcr-commands
                 ./jcr-ext
                 ./jcrtaglib
                 ./phpcr
                 ./tck-webapp
                 ./textfilters
                 ./vfs
                 ...

Commentary:

* We'd keep the main Jackrabbit components (api, commons, and core) at the top level as they are now. They can be built and managed using a Maven multiproject setup at the top level Jackrabbit directory.

* The mature subprojects (like jcr-server) would be placed in ./subprojects and managed as independent entities. It might be useful to include also them in the top level multiproject setup. At least they should be included in the site build. The same level of commit discipline (little or no failing builds) would be required as for the main components.

* The contrib projects would remain in ./contrib. They'd not be included in any of the top level builds, but (if made possible by the main site build script) contrib authors could commit their site builds to site/contrib to publish information about the contrib projects on the Jackrabbit web site.

* The ./application and ./xdocs directories remain as they are. I'm not totally happy with the current use of the ./application/test repository directory (it would be nicer to have it inside ./target), but that's another discussion.

Top-level build
---------------

As proposed by Roy, we should use the Maven Multi-Project plugin to manage builds at the top level. The maven.multiproject.includes property should be either the default (include only the main modules) or "*/project.xml,subprojects/*/project.xml" (include also the mature subprojects).

Additionally, to avoid dependency problems like the recent "maven clean" issue, we should change the "-dev" suffix to the Maven-standard "-SNAPSHOT" and start publishing periodic binary snapshots either on the Day repository or at Ibiblio. This would be nice for other purposes as well.

Web site navigation
-------------------

Following the above directory layout proposal, we could divide the web site like this:

    Apache Jackrabbit
        [the current documentation]
    Jackrabbit components
        Jackrabbit API
        Jackrabbit Commons
        Jackrabbit Core
    Jackrabbit subprojects
        JCR-RMI
        JCR Server
        ORM Persistence
        ...
    Jackrabbit contributions
        ...

The new sections would contain pointers to the individual subsites generated by multiproject. General documentation would remain at the top level, and the technical details (generated javadocs, developer instructions, TODOs, etc.) would be included in the subsites.

IDE and tool support
--------------------

It would be nicer for IDEs and various tools if the current main modules would _not_ extend the top level project.xml. For example at the moment you cannot just grab jackrabbit/commons and build it. Instead you need to get the whole Jackrabbit source tree to do this. As the top level project.xml contains mostly just descriptive information not directly used in building the sources, I'd propose removing this dependency. It would remove the contributor and mailing list information from the module projects, but I think we could manage with having that information only at the top level.

BR,

Jukka Zitting

Reply via email to