Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why implementation gradle dependecies are exposed to consumers

Tags:

gradle

The java-library plugin documentation says:

Dependencies appearing in the api configurations will be transitively exposed to consumers of the library, and as such will appear on the compile classpath of consumers. Dependencies found in the implementation configuration will, on the other hand, not be exposed to consumers, and therefore not leak into the consumers' compile classpath

However, it doesn't work for me. I see that the implementation dependencies are exposed to consumers too.
Here one example:

project_a -> build.gradle

...
dependencies {
  // Dependency supposedly not exposed to consumers in their own classpath compilation  
  implementation 'com.google.guava:guava:23.0'
}
...

project_b -> build.gradle

...
dependencies {      
  implementation 'my-company:project_a:1.0'
}
...

I expected that guava doesn't appear in the project_b' classpath. However I see guava and all their dependencies on the project_b compile classpath.

project_b>> gradlew dependencies:

...
compileClasspath - Compile classpath for source set 'main'.
\--- my-company:project_a:1.0
     \--- com.google.guava:guava:23.0
          +--- com.google.code.findbugs:jsr305:1.3.9
          +--- com.google.errorprone:error_prone_annotations:2.0.18
          +--- com.google.j2objc:j2objc-annotations:1.1
          \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
...
like image 732
Gustavo Bartolomeo Avatar asked Oct 21 '25 22:10

Gustavo Bartolomeo


1 Answers

The reason you do not experience this behaviour is because your dependency goes through a Maven POM.

The separation of the Maven compile and runtime scopes is only supported as of Gradle 4.6 and is currently behind a feature flag.

In short, if you add the following to settings.gradle of project_b, you will get the expected behaviour:

enableFeaturePreview("IMPROVED_POM_SUPPORT")
like image 51
Louis Jacomet Avatar answered Oct 24 '25 19:10

Louis Jacomet



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!