I agree with Thibault, *compileOnly* and *provided* have specific
objectives.

Besides you can always tell Gradle to force a specific version of a given
module
https://docs.gradle.org/current/userguide/dependency_management.html#sec:finetuning_the_dependency_resolution_process

2017-04-22 2:48 GMT+02:00 Thibault Kruse <tibokr...@googlemail.com>:

> You do not really offer 'more control' that way, as build systems
> today already offer full control over transitive dependencies.
> Instead, what you do is to force users to handle transitive
> dependencies to groovy in an explicit way (unless they happen to have
> a groovy version from somewhere else), possibly helping users in
> failing fast when no explicit dependency resolution exists. That may
> be good or bad.
>
> IMO you are abusing compileOnly/provided scopes. compileOnly is meant
> for things like marker annotations that will not go into the generated
> bytecode. provided is meant for Containers such as in Java EE.
> And abusing concepts is never a good thing.
>
> What can happen to users I guess is that they end up with a classpath like:
> groovy-sql:2.1.6;groovy-all:2.4.6;groovy-nio:2.1.6
>
> So probably it would be better for libraries to declare compile
> dependencies, but not on groovy-all.
>
> And groovy should define at least documentation for how to handle such
> conflicts in the best way.
>
> I also believe gradle has new features for dependency resolution
> coming up, where groovy might also offer resolution rules to import
> into gradle.
>
>
> Also, BTW, I noticed the individual groovy POMs on maven central all
> have the same description: 'Groovy: A powerful, dynamic language for
> the JVM'. https://mvnrepository.com/artifact/org.codehaus.groovy
>
> Might be nicer to have individual descriptions, as a little finishing
> touch.
>
>
> On Mon, Apr 17, 2017 at 6:38 AM, Schalk Cronjé <ysb...@gmail.com> wrote:
> > I am wondering what people's approach is to build Groovy libraries with
> > Gradle. Most people will probably use something like
> >
> > dependencies {
> >     compile 'org.codehaus.groovy:groovy-all:2.4.7'
> > }
> >
> > which will set the appropriate Groovy version as a dependency. This can
> > obvisously lead to some interestign Groovy version resslution when
> combining
> > multiple libraires with different Groovy versions as dependencies.
> >
> > For a number of projects I have worked on, I have adopted the 'provided'
> > scope via the Nebula plugin, or since 'compileOnly' has become available
> in
> > Gradle defaulted to that i.e.
> >
> > dependencies {
> >     compileOnly 'org.codehaus.groovy:groovy-all:2.4.7'
> > }
> >
> > This obviously means that the consumer of one of my Groovy libraries has
> to
> > explicitly state which version of Groovy they require, but IMO it is
> better
> > that way as it gives them more control.
> >
> > Thoughts?
> >
> > --
> > Schalk W. Cronjé
> > Twitter / Ello / Toeter : @ysb33r
>

Reply via email to