I think it would be easier to review and discuss these changes with smaller, more focused PR’s. Is there a way to split up these changes? That would help me a lot and I would be less concerned about introducing a problem with our POM’s / dependencies.
Thanks, Anthony > On Oct 1, 2018, at 2:04 PM, Dan Smith <dsm...@pivotal.io> wrote: > > If what we are doing is just making sure that each geode module is > explicitly declaring all of its first order dependencies (things that > directly show up in import statements) in its build.gradle, then this seems > good to me. > > I don't think we want to stop using gradle's ability to pull in all of the > transitive implementation dependencies that we don't directly use. We don't > want to get into the business of maintaining those manually. > > Removing unused dependencies and pulling in this lint plugin also seem like > good improvements. > > -Dan > > On Mon, Oct 1, 2018 at 1:44 PM Patrick Rhomberg <prhomb...@apache.org> > wrote: > >>> Patrick, you just mentioned the java-library plugin's ability to >>> distinguish between api and implementation dependencies. Geode doesn't >> use >>> that plugin yet AFAIK, nor does the PR introduce that plugin right? >> >> That is correct, we do not yet make use of the `java-library` plugin (which >> has the `implementation` and `api` configurations) and are still using the >> `java` plugin (and rely on the `compile` configurations). I brought it up >> only to mention that there will be a great deal of inter-module build >> breakages if we were to try to transition to using `implementation` while >> our actual dependencies of each module were not yet explicit. >> >> And yeah, all of this is on the road to Java9 modules. >> >> As for accepting this PR, there are still multiple issues with it as it >> stands -- I mostly opened it in its current state to spur this discussion. >> I'm was going to go open a handful of tickets so that each individual PR >> and commit are more bite-sized. >> >> On Fri, Sep 28, 2018 at 4:26 PM, Bill Burcham <bburc...@pivotal.io> wrote: >> >>> So it sounds like (per Robert) we use the gradle-lint-plugin's >>> unused-dependency rule to warn us of unused dependencies. That handles >> one >>> side of the equation (only list *necessary* dependencies). >>> >>> I haven't heard anyone mention tool support for the other side of the >>> equation: ensuring that we list the *sufficient* list of dependencies per >>> build.gradle. >>> >>> Patrick, you just mentioned the java-library plugin's ability to >>> distinguish between api and implementation dependencies. Geode doesn't >> use >>> that plugin yet AFAIK, nor does the PR introduce that plugin right? >>> >>> All this seems of a piece with the march toward modularity, exemplified >> by >>> Java 9 modules. Patrick, is your vision something like: >>> >>> 1. accept this PR >>> … >>> 2. introduce the java-library plugin and segregate dependencies into api >>> vs. implementation ones >>> … >>> N. define Java modules >>> >>> >>> On Fri, Sep 28, 2018 at 10:39 AM Patrick Rhomberg <prhomb...@apache.org> >>> wrote: >>> >>>> Bill has the heart of it, yes. >>>> >>>> I should have also mentioned that this ties into java-library plugin >>>> configuration, notably that the `compile` configuration is deprecated. >>>> For dependences that we do not wish to leak, we will need to use >>>> `implementation`. For dependencies which we intentionally elect to >> share >>>> with our consumers, we should use `api`. >>>> >>>> For modularity, it should not break one module's ability to build for >>>> another module to declare a `compile` configuration to be >>> `implementation`, >>>> unless of course that dependency is an active and necessary component >>> part >>>> of that module's consumption. In that case, it should be declared part >>> of >>>> the modules `api`. >>>> In this vein and as Bill pointed out, a module should have an accurate >>>> representation of its own build-time dependencies. >>>> >>>> In time, this will allow a much improved build experience, since >>>> `implementation` and `api` are positioned for better granularity of >>>> incremental building. >>>> >>>> On Fri, Sep 28, 2018 at 10:23 AM, Robert Houghton < >> rhough...@pivotal.io> >>>> wrote: >>>> >>>>> Hi Bill, >>>>> >>>>> We are using a Gradle plug-in to identify dependencies that are >> unused, >>>> or >>>>> are declared in the wrong module or scope. >>>>> This is called out by the Gradle documents on improving build [ >>>>> https://guides.gradle.org/performance/#avoid_unnecessary_and_unused_ >>>>> dependencies]. >>>>> The plug-in documentation is here [ >>>>> https://github.com/nebula-plugins/gradle-lint-plugin/ >>>>> wiki/Unused-Dependency-Rule >>>>> ] >>>>> >>>>> Thank you, >>>>> -Robert Houghton >>>>> >>>>> On Fri, Sep 28, 2018 at 10:18 AM Bill Burcham <bburc...@pivotal.io> >>>> wrote: >>>>> >>>>>> From the PR, Anthony, it seems to me that Patrick is proposing that >>>> each >>>>>> build.gradle be explicit about mentioning the "things" it depends >> on. >>>> For >>>>>> example: >>>>>> >>>>>> [image: image.png] >>>>>> >>>>>> Look at how geode-connectors goes from mentioning a few >> dependencies >>> to >>>>>> mentioning many more. The value of this is that it ostensibly shows >>> us >>>>> all >>>>>> the things that geode-connectors actually depends on. >>>>>> >>>>>> The challenge I see is two-fold: >>>>>> >>>>>> • as with Java imports and "unused imports", there is the risk of >>>> listing >>>>>> more dependencies than we actually need >>>>>> • there's also the risk that we still don't have a complete list of >>>>>> dependencies >>>>>> >>>>>> Patrick: do you have tool support for this? Is there a tool that >> can >>>>>> identify or even remove unused dependencies? What process do you >> use >>>> for >>>>>> finding these heretofore hidden dependencies? Did you run gradle >>>>>> app:dependencies? >>>>>> >>>>> >>>> >>> >>