简体   繁体   中英

Gradle transient dependencies

I have a project "lib" with declares dependency on third party library (lets say, redis).

dependencies{
        implementation group: 'redis.clients', name: 'jedis', version: '2.9.0'
    }

I have another project, "application", which is declares dependency on "lib" project in very similar way.

The problem: unless I adding redis dependency to the "application" project as well, it fails at runtime due to missing redis dependency (despite that it itself doesn't make any direct use of redis).

I want to declare "redis" dependency inside "lib" project in such way, so "lib" will be already "bundled" with "redis" inside, so everyone using "lib" will have to declare only "lib" dependency.

How to do that?

Assuming you apply the java or java-library plugins, you should not have to do anything.

A dependency added to the implementation scope in Gradle is visible to consumers of that project for their runtime classpath. It is however not visible to the compile classpath.

In order to understand better what's happening, you can check the different classpath by running ./gradlew <project>:dependencies --configuration runtimeClasspath on both projects and see what is the output, of course replacing <project> with the project name or leaving empty for the root project.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM