thinkaurelius/titan — pull request #65 by jramsdale (2012-08-27 22:52:32+00:00)
Title: Refactor Titan into multi-module Maven build

Posting this pull request for discussion (a la GitHub itself: https://github.com/blog/1124-how-we-use-pull-requests-to-build-github). It is not quite ready to merge. Here are the things I changed:

* Converted root from jar to pom packaging; added submodules for titan-core, titan-test, titan-distribution, and each StorageManager type
* Changed groupId from com.thinkaurelius to com.thinkaurelius.titan
* Removed redundant info in root pom (duplicates Sonatype pom or configures to defaults)
* Moved assembly configuration to titan-distribution to avoid chicken-egg build problem (standard Maven practice)
* Created new com.thinkaurelius.titan.diskstorage.util.ByteBufferUtil.bytesToHex(byteBuffer) (and corresponding unit test) to avoid Cassandra dependency from non-Cassandra modules. It involves an array copy, so could perhaps be improved upon, but it's only used in toString() methods.
* Changed code in one or two places where dependency ordering resulted in different artifacts with API changes. There is Titan technical debt here--old or conflicting dependencies should be updated and resolved whenever possible, but I wanted to defer to a later commit so as not to confuse this commit's concerns.
* Added SPI-based StorageManagerFactory since GraphDatabaseConfiguration can't know what StorageManager implementations are available at compile time (it's a dependency of implementation modules).
* Removed unnecessary uber-jar assembly

Here's what remains:
* Assemblies are not building with 'provided' scope dependencies
* Distribution assembly doesn't build with src and docs

I would appreciate any feedback as well as assistance with the final 2 issues.