I think I have the dependency stuff working out pretty nicely. Works for both command line maven runs and for intellij. It's easy for developers working on the neo4j-gremlin module and even includes some protections against accidental deployment of stuff that shouldn't be deployed under Apache. This all works with just some basic maven profile work. Basically, if you do this at the root of the repo:
mvn clean install the entire project will build, including neo4j-gremlin, however, neo4j-gremlin's tests will not execute. That's analogous to the old model of the -DfeelingLucky model, where we would skip Neo4j tests as they ran too long. That's basically the default. Take a look at the dependency tree under the default profile for neo4-gremlin: $ mvn dependency:tree [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Apache TinkerPop :: Neo4j Gremlin 3.0.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ neo4j-gremlin --- [INFO] org.apache.tinkerpop:neo4j-gremlin:jar:3.0.0-SNAPSHOT [INFO] +- org.apache.tinkerpop:gremlin-core:jar:3.0.0-SNAPSHOT:compile [INFO] | +- org.apache.tinkerpop:gremlin-shaded:jar:3.0.0-SNAPSHOT:compile [INFO] | +- commons-configuration:commons-configuration:jar:1.10:compile [INFO] | | \- commons-lang:commons-lang:jar:2.6:compile [INFO] | +- org.yaml:snakeyaml:jar:1.15:compile [INFO] | +- org.javatuples:javatuples:jar:1.2:compile [INFO] | +- com.carrotsearch:hppc:jar:0.7.1:compile [INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.5.3:compile [INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.5.0:compile [INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.5.3:compile [INFO] | +- com.jcabi:jcabi-manifests:jar:1.1:compile [INFO] | | \- com.jcabi:jcabi-log:jar:0.14:compile [INFO] | +- org.slf4j:slf4j-log4j12:jar:1.7.12:compile [INFO] | | +- org.slf4j:slf4j-api:jar:1.7.12:compile [INFO] | | \- log4j:log4j:jar:1.2.17:compile [INFO] | \- org.slf4j:jcl-over-slf4j:jar:1.7.12:compile [INFO] +- org.apache.tinkerpop:gremlin-groovy:jar:3.0.0-SNAPSHOT:compile [INFO] | +- org.apache.ivy:ivy:jar:2.3.0:compile [INFO] | +- org.codehaus.groovy:groovy-all:jar:indy:2.4.1:compile [INFO] | +- jline:jline:jar:2.11:compile [INFO] | +- org.apache.commons:commons-lang3:jar:3.3.1:compile [INFO] | \- org.kohsuke:groovy-sandbox:jar:1.6:compile [INFO] +- org.neo4j:neo4j-tinkerpop-api:jar:0.1:compile [INFO] +- org.apache.tinkerpop:gremlin-test:jar:3.0.0-SNAPSHOT:test [INFO] | +- com.carrotsearch:junit-benchmarks:jar:0.7.2:test [INFO] | +- com.h2database:h2:jar:1.3.171:test [INFO] | +- commons-io:commons-io:jar:2.4:test [INFO] | +- junit:junit:jar:4.12:test [INFO] | | \- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] | +- org.mockito:mockito-all:jar:1.9.5:test [INFO] | \- org.hamcrest:hamcrest-all:jar:1.3:test [INFO] \- org.apache.tinkerpop:gremlin-groovy-test:jar:3.0.0-SNAPSHOT:test It is free of all GPL'd dependencies and only includes this reference to anything "neo4j": [INFO] +- org.neo4j:neo4j-tinkerpop-api:jar:0.1:compile which is, of course, licensed via Apache 2. Note that we don't package neo4j-gremlin with either of our binary distributions (server or console), but even so there would be nothing GPL'd laying about in there. Now, if someone is a developer who is working on the neo4j-gremlin module and they want to run the tests, they can just run with this profile: mvn clean install -DincludeNeo4j that profile includes the full stack of Neo4j dependencies so that tests can run, but only includes it as test scope. In intellij, you would flip on the include-neo4j-for-test profile so that you could run tests in the debugger. As an added precaution, i disabled the maven-deploy-plugin under this profile for neo4j-gremlin which would prevent someone from trying to do this: mvn deploy -DincludeNeo4j In this case, deploy for neo4j-gremlin would be ignored while the rest of the modules were allowed to execute under that phase. To conclude, I built up both the binary and source distributions and checked their contents. The contain no GPL dependencies under this model. I guess the only question is whether or not we can distribute the pom.xml in the source distribution with this profile: https://github.com/apache/incubator-tinkerpop/blob/0285ef689491365e9dc9db25748be2ef9b4a37bb/neo4j-gremlin/pom.xml#L119-L168 It would be good to hear from mentors on this topic to get some feedback. Thanks, Stephen On Thu, May 28, 2015 at 5:27 PM, Jason Plurad <[email protected]> wrote: > Thanks for the update, Marko. > > For clarification, when running the Neo4j test suite, the > AGPL/GPL-licensed Neo4j impl classes are pulled down from Central Repo. > Running the Neo4j test suite is OPTIONAL, and all other TinkerPop unit > tests can be run without running the Neo4j test suite. Did I understand > that correctly? Are there other Apache projects that have set a precedent > with this technique? > > I'll definitely try out the branch and see how it fits. Thanks again. > > -- Jason > > > On Thu, May 28, 2015 at 12:44 PM, Marko Rodriguez <[email protected]> > wrote: > >> 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 >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Gremlin-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/gremlin-users/5233348C-EF67-4F8E-B24E-E6AFBC993A4F%40gmail.com >> <https://groups.google.com/d/msgid/gremlin-users/5233348C-EF67-4F8E-B24E-E6AFBC993A4F%40gmail.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > Have a good one, > Jason > > -- > You received this message because you are subscribed to the Google Groups > "Gremlin-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/gremlin-users/CAOk5v9OKzDDwRxWwvtsoBh2wABdj7MxmnPn_%2BHc52Nz4OoMPqA%40mail.gmail.com > <https://groups.google.com/d/msgid/gremlin-users/CAOk5v9OKzDDwRxWwvtsoBh2wABdj7MxmnPn_%2BHc52Nz4OoMPqA%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. >
