Thanks. That's a very clear explanation. I should think about how to
incorporate that into https://jlbp.dev


On Fri, Jan 17, 2020 at 12:12 PM Aaron Dixon <atdi...@gmail.com> wrote:
>
> @Tomo Suzuki Thanks for looking at this and your thorough analysis// let me 
> know if I can help with any regression testing, CRs, or more context anything 
> else.
>
> ---
>
> @Elliotte I was a little confused at first re: vendoring vs shading but here 
> is how I understand it (happy to be corrected if anything I say here is a 
> mischaracterization); I tend to over-explain for my own clarity fwiw--using 
> Guava as an example:
>
> With SHADING you have your project (e.g., Beam) depend directly on Guava and 
> its public package names. Your build will then compile and link to these 
> package names and only after-the-fact [1] rewrite the byte-code to rename the 
> guava package. This entails both byte-code rewriting the Guava class files 
> (to rename the packages of the Guava code itself) and byte-code rewriting all 
> of your project class files that import Guava (to change the import to use 
> the new package name).
>
> With VENDORING you release a renamed Guava ("vendor") JAR and depend on that 
> directly from your project. So your project's source code itself imports the 
> (repackated)  vendor JAR and depends on the renamed packages directly. Your 
> project build then has no need for shading or byte code rewriting of its own 
> classes. I see vendoring making it very clear what is going on when looking 
> at a project's source code and its dependencies, and there are likely other 
> tangible brass-tacks benefits to vendoring besides the conceptual clarity 
> over shading.
>
> [1] You can see that Maven shade:shade goal binds by default to Maven's 
> package phase (which is well after after compilation).
>
> On Fri, Jan 17, 2020 at 9:16 AM Tomo Suzuki <suzt...@google.com> wrote:
>>
>> Ismaël and I think the short-term solution for Aaron's issue is to
>> define Beam's own class for Avro's TimestampConversion. Luckily it's
>> the only blocker for Avro 1.9 I found.
>> I created a ticket https://issues.apache.org/jira/browse/BEAM-9144 and
>> PR https://github.com/apache/beam/pull/10628 .
>>
>> Regards,
>> Tomo
>>
>> On Fri, Jan 17, 2020 at 7:32 AM Elliotte Rusty Harold
>> <elh...@ibiblio.org> wrote:
>> >
>> > On Thu, Jan 16, 2020 at 7:08 PM Kenneth Knowles <k...@apache.org> wrote:
>> > >
>> > > Regarding Google's advice about shading: don't go to a "one version 
>> > > rule" monorepo for advice about solving diamond dependencies in the wild.
>> >
>> > FWIW these docs came out of the open source, Github, multirepo, many
>> > versions part of Google Cloud, not the mono repo world of google3.
>> > Though I will say the more time I spend trying to deal with these
>> > issues the more I love the monorepo.
>> >
>> > > It is a useful description of the pitfalls. We (and Flink before us, and 
>> > > likely many more) are already doing something that avoids many of them 
>> > > or makes them less likely. Building a separate vendored library is 
>> > > simpler and more robust than the "shade during build".
>> > >
>> >
>> > I've only encountered "vendoring" as distinct from shading in Beam.
>> > Are there more details about this anywhere? A quick Google search only
>> > turned up one Beam doc that pointed to Go docs and a cloud endpoints
>> > doc that seemed to use it as a synonym for shading.
>> >
>> >
>> > --
>> > Elliotte Rusty Harold
>> > elh...@ibiblio.org
>>
>>
>>
>> --
>> Regards,
>> Tomo



-- 
Elliotte Rusty Harold
elh...@ibiblio.org

Reply via email to