On 09/20/2010 08:53 PM, Scott Carey wrote:
For avro-core, the libraries of interest are Paranamer and Jackson.
Paranamer only adds up to 35K; Jackson is a bit larger at 500K but is
absolutely critical for Avro. Jackson-core is only 150K however --
it might be possible to drop jackson-mapper.
That's an interesting feature and could be useful.
I think it only works when we don't expose shaded classes as a part of
our public APIs. We currently do expose Jackson in a few places:
Schema#Field has a constructor that accepts a JsonNode as a
representation of the default value; and JsonEncoder has a constructor
that accepts a JsonGenerator as output. The former could probably be
easily fixed, but the latter might be harder to replace without losing
potentially useful end-user functionality.
I'd be much more comfortable with shading if we had automated tests that
checked that shaded classes are not referenced in our public APIs.
Tatu (Jackson's primary developer) has expressed remorse that 1.0.1 has
incompatibilities with subsequent 1.x releases. So, instead of
defensive, we could be optimistic, and hope that that this won't occur
again in any Jackson 1.x releases.
Paranamer is only required for reflection-based RPC. It's classes do
not appear in any public Avro APIs. The paranamer jar itself is small,
but its transitive dependencies are large, I think.
Paranamer is BSD, and Jackson is Apache. I'm not sure of the
implications of repackaging these into Avro.
We could include these in Avro without legal issues.
Doug