On Thu, May 16, 2013 at 1:28 PM, Gary Gregory <garydgreg...@gmail.com>wrote:
> FWIW, it look like Avro 1.7.4 still depends on Jackson 1.8.8. > > I'd go with solution (3) and let other dependencies catch up to modern > versions of Jackson but... > > It looks like J1 and J2 are in different packages right? v2 in > com.fasterxml.jackson and v1 in org.codehaus.jackson? > > So if you changed a dependency from v1 to v2 and did not change import > statements, you are NOT using v2. > Ah, I now see the v2 package names, never mind on that last point. Gary > > Gary > > > On Thu, May 16, 2013 at 1:17 PM, Nick Williams < > nicho...@nicholaswilliams.net> wrote: > >> So this is all kinds of fun... >> >> log4j-core depends on: >> ....jackson 1.9.11 (optional) >> log4j-flume-ng depends on: >> ....flume-ng-sdk 1.3.1 depends on: >> ........avro 1.7.2 depends on: >> ............jackson 1.8.8 >> flume-embedded (sample) depends on: >> ....flume-ng-sdk 1.3.1 depends on: >> ........avro 1.7.2 depends on: >> ............jackson 1.8.8 >> ....flume-ng-node 1.3.1 depends on: >> ........jackson 1.9.3 >> >> So, we already had three different versions of Jackson in the build: >> 1.8.8, 1.9.3, and 1.9.11 ... yuck! >> >> I took the following steps: >> >> 1) I upgraded log4j-core's dependency from 1.9.11 to 2.2.1 without any >> negative consequences. Everything compiled and all the tests passed. At >> this point the dependencies were now 1.8.8, 1.9.3, and 2.2.1. >> 2) I used dependency exclusions to exclude 1.8.8 and got it down to just >> 1.9.3 and 2.2.1. Everything compiled and all the tests passed. >> 3) I tried to eliminate 1.9.3 through a further dependency exclusion, but >> log4j-flume-ng classes didn't load anymore. This indicated that Jackson is >> NOT an optional dependency of log4j-flume-ng, but instead is a mandatory >> dependency, which wasn't obvious the way it was set up. >> 4) I kept the 1.9.3 dependency exclusion but added a mandatory 1.9.11 >> /runtime/ dependency for log4j-flume-ng. Now everything compiles and all >> tests pass again, and the Jackson dependencies are limited to the latest >> minor.patch versions of each major version: 1.9.11 (log4j-flume-ng only, >> runtime) and 2.2.1 (log4j-core only, compile). >> >> Ralph said below "I have no problem upgrading to 2.x so long as it works >> for both the JSON configuration and Flume." It doesn't work with Flume; >> Flume requires 1.x. So as a next step we can either: >> >> 1) Revert my changes to configuration so that it relies on Jackson 1.9.11 >> as well and not on 2.2.1. >> 2) Apply my earlier suggestion that we support both 1.9.11 /and/ 2.2.1 or >> configuration. >> 3) Stick with what we have: 1.9.11 for Flume, 2.2.1 for JSON >> configuration, and no more dependency on 1.8.8. >> >> Nick >> >> On May 15, 2013, at 7:33 PM, Ralph Goers wrote: >> >> > I wrote the JSON support just after the ApacheCon in Vancouver, which I >> believe was in 2011. If 2.x was available then it was brand new and the >> documentation was slim. I have no problem upgrading to 2.x so long as it >> works for both the JSON configuration and Flume (I don't think Flume >> actually uses JSON but Avro probably does). Like you, I would prefer not >> to have two versions of Jackson in out build. >> > >> > Ralph >> > >> > >> > On May 15, 2013, at 11:16 AM, Gary Gregory wrote: >> > >> >> I would only support the current version: 2.x. >> >> >> >> Gary >> >> >> >> >> >> On Wed, May 15, 2013 at 2:00 PM, Nick Williams < >> nicho...@nicholaswilliams.net> wrote: >> >> Guys, >> >> >> >> Background: Since I'm the lead developer on a Jackson Mapper module ( >> https://github.com/FasterXML/jackson-datatype-jsr310), I'm actively >> involved on their development mailing list. >> >> >> >> Jackson 1.9 is, well, old. Specifically, 1.9.0 is two years old. 1.9 >> is the last minor version of the 1.x family. There will continue to be bug >> fixe releases—for now—about every 4-6 months. The last patch release was in >> January. >> >> >> >> Jackson 2.x is the current version with rapid release periods. 2.0 Is >> about a year old, 2.1 was released in October and 2.2 was released last >> month. Only major bugs will be fixed in 1.9.x. Minor bug fixes and all new >> features will go in 2.x. >> >> >> >> Jackson 1.x and 2.x use different Java packages. This has both >> advantages and disadvantages. One advantage is that frameworks and >> libraries, like Spring Framework, can easily support both versions because >> they can coexist on the same class path during compilation and testing. One >> disadvantage is that if some library is using 1.x and some other library is >> using 2.x and you create an application that depends on both libraries, >> you'll have to pull BOTH versions of Jackson on to your class path. Ugh. >> >> >> >> Log4j 2 is "brand new" (it's not even released yet). Typically, I >> would argue that new projects should not use old versions of their >> dependencies. In Log4j 2's case, I tend to lean the same direction. It >> doesn't seem wise to tie ourselves to Jackson 1.x so late in its life when >> Jackson 2.x is already mature and Log4j 2 isn't even released yet. As a >> Java 8, Spring 4, Jackson 2 user, I know I wouldn't love having to also >> have Jackson 1 on my class path (if I were using JSON configuration). >> >> >> >> I would suggest that we should either support both or we should only >> support 2.x, but only supporting 1.x feels wrong to me. >> >> >> >> Supporting both wouldn't be a major challenge. The way Spring does it >> is to have two Jackson* classes and Jackson2* classes with identical APIs. >> Depending on which version you are already using, you use the appropriate >> class. In this case, I would approach it like this: >> >> >> >> - Rename JSONConfiguration to Jackson1JSONConfiguration, and (using >> CheckStyle's import control) ensure that only this class imports Jackson 1.x >> >> - Create a similar class named Jackson2JSONConfiguration, and ensure >> that only this class imports Jackson 2.x >> >> - Alter JSONConfigurationFactory to detect which version is on the >> class path and return the appropriate JSON configuration, preferring 2.x if >> both are on the class path >> >> >> >> Thoughts? >> >> --------------------------------------------------------------------- >> >> To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org >> >> For additional commands, e-mail: log4j-dev-h...@logging.apache.org >> >> >> >> >> >> >> >> >> >> -- >> >> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >> >> Java Persistence with Hibernate, Second Edition >> >> JUnit in Action, Second Edition >> >> Spring Batch in Action >> >> Blog: http://garygregory.wordpress.com >> >> Home: http://garygregory.com/ >> >> Tweet! http://twitter.com/GaryGregory >> > >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org >> For additional commands, e-mail: log4j-dev-h...@logging.apache.org >> >> > > > -- > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > Java Persistence with Hibernate, Second > Edition<http://www.manning.com/bauer3/> > JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> > Spring Batch in Action <http://www.manning.com/templier/> > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory > -- E-Mail: garydgreg...@gmail.com | ggreg...@apache.org Java Persistence with Hibernate, Second Edition<http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory