Hello everyone,
Michael Hunger and Philip Rathle of Neo4j have been working closely with Apache
TinkerPop to get neo4j-gremlin/ back into the Apache TinkerPop distribution.
For those that don't remember, the reason it was gutted was due to LICENSE
conflicts. In order to find a solution to this problem, there have been
numerous calls/emails with Neo4j, Apache TinkerPop PMC, the Apache TinkerPop
mentors, and discussions on the general@incubator mailing list. Given all the
recommendations, we have zero'd in on a solution that will allow Apache
TinkerPop to provide neo4j-gremlin/ in the next release.
For those interested in the technical solution to the license problem, please
see the following branch which is sync'd with TinkerPop master/:
https://github.com/apache/incubator-tinkerpop/tree/neo4j-gremlin-apache
Everything builds, but there are some failing tests right now as 2 months have
passed since we have worked with neo4j-gremlin/. I believe they are trivial
fixes.
Here is the LICENSE trick that makes this all possible:
https://github.com/apache/incubator-tinkerpop/blob/neo4j-gremlin-apache/neo4j-gremlin/pom.xml#L39-L43
(Apache2 Licensed)
https://github.com/apache/incubator-tinkerpop/blob/neo4j-gremlin-apache/neo4j-gremlin/pom.xml#L45-L53
(AGPL/GPL Licensed)
What we need to do now is make it so that TinkerPop developers can (on their
local machine) pull in Neo4j libraries for local testing. However, the
apache-tinkerpop-x.y.z-source-release.zip will not have references to these
libraries and thus, only references to the Apache2 Neo4j API. However, because
the Neo4j Apache API has interface references, the package will compile (but
will not test).
I'm not to keen on mvn, shell tricks, etc., but here are some ideas:
1. We have a "bin/test-neo4j-gremlin.sh <boolean>" that inserts/removes
the <dependency> stub into the pom.xml via some awk/sed-magic.
2. We have a -D profile that does some magic? Perhaps simply does what
1 above does, but within a MVN call.
- i.e. bin/test-neo4j-gremlin.sh true; mvn clean install
(remove the -Dtest-neo4j parameter); bin/test-neo4j-gremlin.sh false;
3. If you are TinkerPop developer, you have to manually cut/paste the
<dependency> into the neo4j-gremlin pom.xml if you want to test Neo4j.
- we can have a "bin/strip-neo4j-test.sh" that will remove the
<dependency/> so its less likely for developers to push the bad-licensed
pom.xml.
Anywho -- looks like we are on our way. Here is what is on our immediate plate:
1. @Kuppitz (others?): Come up with a good solution to the pom.xml test
<dependency/> issue articulated above.
2. @Stephen: Get the IO tests working with neo4j-gremlin.
3. @Michael: Look at the <dependency> naming conventions -- they are a
bit "off":
<groupId>org.neo4j</groupId>
<artifactId>neo4j-tinkerpop-api</artifactId>
<groupId>org.neo4j</groupId> <artifactId>tinkerpop-api-impl</artifactId>
- also, should we go with
<artifactId>neo4j-apache2-api</artifactId> as its general to anyone?
4. @Marko: Make two Neo4jGraph implementations -- one that supports
multi-properties and one that doesn't (don't have all this if/else checking in
one implementation).
5. @Marko/Stephen: Get the test suite for Neo4j up to par with latest
TinkerPop3 -- I've put null-parameters here and there where test suite methods
have changed and there is no obvious mapping.
6. @Stephen: Get the Neo4jGremlinPlugin to dynamically pull in the
Neo4j impl library via Gremlin Console/Server.
Here is what is required a little further down the road once all the code
challenges above are complete:
1. The Neo4j team needs to to publish their new API packages to Central
Repo.
2. TinkerPop will merge the neo4j-gremlin-apache/ branch into master/.
3. Send promotional tweets with images of Gremlin and Neo4j iconography
doing stuff. :)
Thanks Neo4j and mentors for the numerous hours you have dedicated to this
problem. I'm exited to see neo4j-gremlin/ in TinkerPop3 GA.
Take care,
Marko.
http://markorodriguez.com