At the risk of adding nothing to this thread (!), I can't see how
Elasticsearch is shading JAR files according to the legalese I have read.
Elasticsearch doesn't just repackage the contents of JAR files.
It's more like taking chunks of source code, throwing out what isn't
needed, changing what remains for a better integration in some places, and
putting it into a completely different classpath. It's moret like taking a
snippet from StackOverflow, except that the snippets are much larger!
As for Netty, the real Netty (whose jar I have included in my own servers
that work with ES) is found at org.jboss.netty., whereas all ES classes
are found at org.elasticsearch.. The fact that some class in ES has
"Netty" in its name is interesting but does not cause my build process any
confusion or dependency issues at all.
The same is true of Jackson. Except that in this case, I am perfectly
content with the stream parser subset in ES and so I use the parser subset
embedded inside ES. But the fact that it happens to work mostly like the
"real" Jackson is only interesting (and very useful) but would not
interfere with any dependency on an external Jackson JAR file.
And the bottom line is: Elasticsearch has been 100.0% rock solid for me (it
really has made me look very good!), is tiny enough to run on my MacBook
and yet capable enough to host the myriad different indices that I use for
development, testing, and ES exploration, from exploring the flexibility of
analyzers and mappings, to exploring the capability of 100M+ records (on
that same laptop).
So whatever the ES developers have done, it works beautifully and reliably
(infinitely better than the Oracle JDBC conundrum on OS X). It doesn't
interfere with my "real" Netty JAR dependency, and (quite surprisingly)
provides me with all of the classes I've needed so far... except for the
sole exception of "real" Netty!
On Wednesday, January 23, 2013 3:29:46 AM UTC-5, Jörg Prante wrote:
Sorry if my rant was too harsh, that's really not my intention.
I'm aware that chasing all the subtle bugs and wrong decisions in the
upstream development of the dependencies is very hard work and is most
admirable. To see your suggestions being integrated into upstream is very
delighting and I hope your improvements will continue being picked up.
What makes me wonder is there are other dependencies like Lucene or the
LGPL-licensed JTS for the geo search which are also "hacked"/"enriched" for
use by Elasticsearch, but are provided as unmodified jars.
My point is, there are other methods to override deficient/unwanted code
in dependencies. For example, adding patch jars in front of the classpath,
that can be removed when upstream bugs are fixed. The original dependencies
could be used throughout the build and plugin development, but are not
effective at runtime. For example, OSGi uses "fragments" for this
classpath-based approach (I read about it, I'm not an OSGi expert). Another
example, WAR artifacts which depend on other WAR artifacts often use
"overlays", but not shading.
For creating Elasticsearch RPMs, I mean the Fedora Packaging Guidelines.
Fedora Packaging Guidelines for Java - Fedora Project Wiki
In short, Fedora policy insists on no bundling, no shading, clean
licensing. Quoting: "Many Java projects re-ship their dependencies in their
own releases. This is unacceptable in Fedora. All packages MUST be built
from source and MUST enumerate their dependencies with Requires."
There has been an effort started to package Elasticsearch for Fedora
recently
https://bugzilla.redhat.com/show_bug.cgi?id=902086
Fedora provides Guava, Netty, Jackson, Joda, Sigar RPMs already, and also
Lucene RPMs. I would really appreciate it if I could help to create
Elasticsearch RPMs which can be accepted by Fedora QA.
Best regards,
Jörg
--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.