@Reuven: any idea what is missing? I don't expect it to be ready very
quickly but having 2 repos does not hurt that much if both are working
better than a single one so can be worth a try maybe?

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
<https://www.packtpub.com/application-development/java-ee-8-high-performance>


Le mer. 10 oct. 2018 à 08:31, Reuven Lax <re...@google.com> a écrit :

> Unrelated to the Maven/Gradle discussion, but I do somewhat agree with
> Romain that Beam could be split into separate repos, however I don't think
> it's quite ready yet. AFAIK the portability interfaces are still being
> modified, and until these interfaces are fixed it will be hard to split the
> project. Once those interfaces are fixed and mature, I completely agree we
> should then look into splitting the repos up.
>
> Reuven
>
> On Tue, Oct 9, 2018 at 10:35 PM Romain Manni-Bucau <rmannibu...@gmail.com>
> wrote:
>
>>
>>
>>
>> Le mer. 10 oct. 2018 à 06:35, Kenneth Knowles <k...@apache.org> a écrit :
>>
>>> Here are some things I hear a lot:
>>>
>>>    - Beam technical decision making is too Java-centric
>>>    - Gradle is a lot less Java-centric than Maven
>>>
>>> Hmm isnt it the opposite being groovy based? Maven tends to have the
>> same set of plugins than gradle so it is a kind of status-quo if you check
>> technically and are factual.
>>
>>
>>>
>>>    - Gradle is still a Java-centric tool, but at least it isn't so
>>>    slow/wasteful
>>>
>>>
>> Not what I experienced and it seems JB had the same experience. Gradle is
>> comparable to maven in terms of full build and is way slower in Idea cause
>> of the lack of integration and support (by design).
>>
>>
>>> I can understand long-time Java devs wanting to have their familiar and
>>> dominant toolchain, with good tooling and integrations (ignoring any
>>> objective merits of Gradle for Java dev). But for non-Java devs you are
>>> meeting in the middle. Actually, you are not even in the middle - you are
>>> still in Java land. For example, setup.py can do arbitrary things, so we
>>> could use it to do the Java build! What do you think of trying this out?
>>> (j/k).
>>>
>>> What I would like is to better support language-native development
>>> workflows, and make sure Gradle is lightweight glue that is easy to use.
>>> Make the configurations as obvious to read as we can, with as little
>>> hackery as possible.
>>>
>>
>> Agree and think it can be time, now Beam python/go support become
>> something, to split in N repos. Release lifecycles are different, codebase
>> has no real link except the portability layer which can get its own repo so
>> probably worth a PoC:
>>
>> 1. beam-portability
>> 2. beam-java
>> 3. beam-go
>> 4. beam-python
>>
>> Side note: beam portability would be saner if added on top of others than
>> the opposite which is done today.
>>
>>
>>>
>>> ----------
>>>
>>> We can make Gradle a lot better (for the above, and for Java too). From
>>> my work on the core of our Gradle support code, I can name a few issues
>>> that I'm sure remain even after many months away from the code:
>>>
>>> 1. We were learning as we built it out. We don't always do things in the
>>> natural way.
>>> 2. We made our own abstractions to streamline converting lots of modules
>>> quickly. Clarity and efficiency of the build were not the primary concerns.
>>> (to be clear: it was an amazing undertaking to get this done and the
>>> decision was right for the moment)
>>> 2a. We tried to centralize a lot of policy, leading to the centralized
>>> bits containing the union of all complexity of all modules (or maybe it is
>>> multiplicative).
>>> 3. We tried very hard to match the mvn build exactly, rather than doing
>>> the best thing in Gradle.
>>> 4. We've built a lot of imperative code for "telling Gradle what to do"
>>> and that adds a lot of complexity compared with using Groovy as primarily a
>>> configuration language.
>>> 5. We have turned on things like "always rebuild" when we don't know the
>>> dependencies, rather than putting in the work to get the dependencies right.
>>>
>>> A lot of the above also makes it hard for IDEs to grok the config, since
>>> we deviate from the "golden path" a lot.
>>>
>>> It would be awesome if module owners took on the task of making their
>>> modules have an awesome incremental Gradle build.
>>>
>>
>> Well incremental build only matters when you run a full subpart of a job
>> and is something very fragile - check how in months it didnt happen. In
>> practise what's a dev workflow:
>>
>> 1. loop { dev in the IDE, run test }
>> 2. run the full module or build to validate nothing has been broken
>> 3. PR (+ back to 1 if comments)
>>
>> This means that incremental support is only relevant for jenkins where
>> the perf diff is not significative and where you can't use incremental
>> build cause you want to have a fully reliable build.
>> So at the end the incremental build support is not that significative for
>> end users and contibutors. The cost of not having the IDE support, however,
>> is just a blocker.
>>
>> So my 2cts would be to stop trying to be good theorically at the cost of
>> loosing the users and try to embrace a community driven choices approach.
>>
>>
>>>
>>> Kenn
>>>
>>> On Tue, Oct 9, 2018 at 3:38 AM Romain Manni-Bucau <rmannibu...@gmail.com>
>>> wrote:
>>>
>>>> For me the vendoring issue is ok cause it should belong to another
>>>> shade loduke released with beam when needed. It is not an uncommon 
>>>> practise.
>>>>
>>>> Now the lack of IDE integration for tests/debug (using gradle runner is
>>>> a workaround and still hurts by its slowness compared to native run) is a
>>>> clear showstopper for me.
>>>>
>>>> Also, from a community perspective, gradle adoption is far to be
>>>> mainstream (even spark is built with maven) so does not serve beam at the
>>>> end.
>>>>
>>>> Maven build didnt have any issue except the duration AFAIK, gradle has
>>>> 2 blockers + several small drawbacks (custom build and no standard, no
>>>> tooling without script execution, bad integration in enterprise chaines
>>>> like security auditing etc). Overall gradle build is close to maven one -
>>>> last time i tested it was within 15% so not worth it when you see the time
>>>> you loose when developping anything. It is key to keep in mind jenkiks is
>>>> cheaper than human time.
>>>>
>>>> Le mar. 9 oct. 2018 13:22, Robert Bradshaw <rober...@google.com> a
>>>> écrit :
>>>>
>>>>> On Tue, Oct 9, 2018 at 10:04 AM Jean-Baptiste Onofré <j...@nanthrax.net>
>>>>> wrote:
>>>>>
>>>>>> Hi guys,
>>>>>>
>>>>>> I know that's a hot topic, but I have to bring this discussion on the
>>>>>> table.
>>>>>>
>>>>>
>>>>> Thank you for bringing this up and revisiting it now that we have some
>>>>> experience.
>>>>>
>>>>>
>>>>>> Some months ago, we discussed about migrating our build from Maven to
>>>>>> Gradle. One of the key expected improvement was the time to build.
>>>>>> We proposed to do a PoC to evaluate the impacts and improvements, but
>>>>>> this PoC was actually directly a migrate on master.
>>>>>>
>>>>>> Now, I would like to bring facts here:
>>>>>>
>>>>>> 1. Build time
>>>>>> On my machine, the build time is roughly 1h15. It's pretty long, and
>>>>>> regarding what the build is doing, I don't see huge improvement
>>>>>> provided
>>>>>> by Gradle.
>>>>>>
>>>>>
>>>>> I rarely, if ever, build from scratch so perhaps I have not been
>>>>> impacted by this nearly as much. (In particular, build and test times seem
>>>>> to have gone way down for me, probably due to better incremental support,
>>>>> but that's just anecdotal.)
>>>>>
>>>>> Is this worse than it was on maven, or just not as much better as was
>>>>> hoped?
>>>>>
>>>>>
>>>>>> 2. Build reliability
>>>>>> Even worse, most of the time, we need to use --no-parallel and
>>>>>> --no-daemon to have a reliable build (it's basically recommended for
>>>>>> release). It has an impact on build time, and we loose part of Gradle
>>>>>> benefits.
>>>>>>
>>>>>
>>>>> I think this is a matter of incorrect dependency declarations (and is
>>>>> not unique to gradle). I'd have loved to been able to go with a build
>>>>> system that simply didn't let you have incorrect dependency declarations,
>>>>> but that wasn't an option for other reasons.
>>>>>
>>>>> I wonder if there's some automatic tooling we could leverage to fix
>>>>> (and keep fixed) this. Regardless, this is unfinished work that remains to
>>>>> be done so we can realize the full benefits.
>>>>>
>>>>>
>>>>>> 3. Release and repositories
>>>>>> Even if couple of releases has been performed with Gradle, it's not
>>>>>> obvious to see improvements around artifacts handling. I got my
>>>>>> repository polluted twice (that's part of the trick Gradle is doing to
>>>>>> speed up the build dealing around the repository).
>>>>>>
>>>>>
>>>>> Could you clarify what improvements we were expecting here? I thought
>>>>> the goal was that we could publish the same artifacts, with no regression.
>>>>>
>>>>>
>>>>>> 4. IDE integration
>>>>>> We already had some comments on the mailing lists about the IDE
>>>>>> integration. Clearly, the situation is not good on that front too. The
>>>>>> integration on IDE (especially IntelliJ) is not good enough right now.
>>>>>>
>>>>>
>>>>> This is important. To be honest, I had also issues back in the day
>>>>> getting the maven setup working well out of the box in IntelliJ and 
>>>>> Eclipse
>>>>> (mostly with respect to things like shadowing and protobufs), so we
>>>>> shouldn't fall prey to the golden age fallacy.
>>>>>
>>>>> It seems the recent move to vendoring has caused more issues here; I'm
>>>>> not sure that would be fixed just moving back to maven (or how to resolve
>>>>> it going forward).
>>>>>
>>>>> On the other hand, just last week I set up a new computer according to
>>>>> https://cwiki.apache.org/confluence/display/BEAM/IntelliJ+Tips and
>>>>> that seems to be working fine.
>>>>>
>>>>>
>>>>>> We are working hard to grow up the community, and from a contributor
>>>>>> perspective, our build system is not good today IMHO.
>>>>>> As a contributor, I resumed my work on some PRs, and I'm spending so
>>>>>> much time of the build, largely more than working on the PRs code
>>>>>> itself.
>>>>>>
>>>>>> So, obviously, the situation is not perfect, at least from a
>>>>>> contributor
>>>>>> perspective.
>>>>>>
>>>>>> The purpose of this thread is not again to have a bunch of replied
>>>>>> ending nowhere. I would like to be more "pushy" and let's try to be
>>>>>> concrete. So basically, we only have two options:
>>>>>>
>>>>>> 1. Improve the build, working hard on Gradle front. Not sure if it
>>>>>> makes
>>>>>> such sense from a contributor perspective, as Maven is really well
>>>>>> known
>>>>>> from most of contributors (and easier to start with IMHO).
>>>>>> 2. Back on Maven. That's clearly my preferred approach. IDE
>>>>>> integration
>>>>>> is better, Maven is well known from the contributors as already said.
>>>>>> The effort is not so huge. We tried to use Gradle, we don't have the
>>>>>> expected results now, that's not a problem, it's part of a project
>>>>>> lifetime.
>>>>>>
>>>>>> Thoughts ?
>>>>>>
>>>>>
>>>>> I'd like to add some perspective as a primarily non-Java contributor
>>>>> (having contributed "only" a couple thousand lines to the java side over
>>>>> the last couple of years) that maven feels much more java-centric (as is
>>>>> our repo, but that's a separate issue). Also, as someone not coming from
>>>>> with years of maven (or gradle for that matter) experience before working
>>>>> on Beam, I have found gradle much more intuitive and easier to learn.
>>>>> Especially when it comes to developing changes that span multiple modules
>>>>> (which for some reason I guess I tend to do a lot of, but with so many of
>>>>> our core sdk tests being validates runner that's likely to hit people just
>>>>> starting out as well). Now of course I don't want to discount the Java
>>>>> community, indeed it's arguably the largest and most important one at this
>>>>> point, but I also think that Beam's ability to not be limited to that one
>>>>> language (and ecosystem) is one of its huge selling points and
>>>>> differentiation (see the whole portability effort, which is for both SDKs
>>>>> and Runners).
>>>>>
>>>>> Even from a Java perspective, neither is so obscure as to be a
>>>>> significant barrier, and both are customizable enough that the average new
>>>>> developer is probably going to be looking at the documentation to see what
>>>>> commands to run to build/test/validate this project. So this is probably
>>>>> something documentation can address.
>>>>>
>>>>> But if we're going to reap the benefits and minimize the downsides of
>>>>> this migration, we have to finish the job.
>>>>>
>>>>> - Robert
>>>>>
>>>>>
>>>>>

Reply via email to