Build

Main ideas:

  • Compatible with SAIL. Therefore the system should use Maven. It may be desirable to have some elements done with Ant, but this is doable.
  • Attempt to get as many source directories as possible into the same directory structure. Propose that this directory be called "core".
    • Independent modules will be kept in their own directories. e.g. content-mp3.
    • All required modules will be kept in "core". This will necessarily include XA1 for the short term. When XA2 is introduced, XA1 can be shifted out.
  • JAR targets will explicitly list the required classes. This is needed since everything is in the same directory. To date, these jars were built from entire directories, meaning they sometimes picked up more than was needed. For instance, driver-*version*.jar will be built from only the required files in core.
  • Minimize the number of targets in the build system. The current set of targets is too large and complex for anyone to follow easily.
  • External modules can have their own build script, but these will not be called by default.
Further suggestions:
  • During a "dist" build, parse config.xml to determine the required external modules. Then call out to build each of these, and include them in the final jar.
  • Create a classloader to scan $CLASSPATH as well as the current Jar file, enabling dynamic loading of modules. (Using the -jar switch disables normal scanning of the class path).

Merging Directories

We probably want to keep all the non-essential content handlers and resolvers out of the core, though I'm undecided about putting them in their own modules, or bundling them all up together. It would be nice to clean it all up by putting them into one module (ie. jar), but they should probably be kept apart. Perhaps they can be put into a subdirectory, and not made a peer of "core".

The following is a suggestion of what should go into the "core" directory:
  • config
  • content-n3
  • content-rdfxml
  • driver
  • itql
  • jrdf
  • krule
  • query
  • resolver
  • resolver-distributed
  • resolver-http
  • resolver-lucene
  • resolver-memory
  • resolver-nodetype
  • resolver-null
  • resolver-prefix
  • resolver-spi
  • resolver-store
  • resolver-view
  • resolver-xsd
  • rules
  • server
  • server-local
  • server-rmi
  • sparql-interpreter

This list includes a lot of resolvers that are not strictly necessary, but provide important internal functionality.

The remaining non-essential modules are:
  • ant-task
  • client-jrdf
  • content-mbox
  • content-mp3
  • content-rio
  • demo
  • demo-mp3
  • doclet
  • doclet141
  • dtd
  • rdql (currently disabled)
  • resolver-file
  • resolver-filesystem
  • resolver-gis
  • resolver-relational
  • resolver-test
  • resolver-url
  • server-beep (currently unused)
  • server-http (currently unused - do we expand on this?)
  • sofa (currently unused - do we revitalize this interface?)