Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gradle dependencies: compile project by relative path

is it possible to specify a dependency in Gradle (in android studio) to another gradle project outside of the current project boundaries? For example with a relative path something like this:

dependencies {   compile project('../../stdlib/dagger') } 

So what I trie is something like this:

I have an Android Application. The structure looks like this:

  • MyApp (path is /Users/foo/workspace/MyApp)
    • app (path is /Users/foo/workspace/MyApp/app)

And I have a gradle android library project containing 3 submodules:

  • stdlib (path is /Users/foo/workspace/stdlib)
    • dagger (path is /Users/foo/workspace/stdlib/dagger)
    • utils (path is /Users/foo/workspace/stdlib/utils)
    • http (path is /Users/foo/workspace/stdlib/http)

What I want is to compile the dagger, utils, http module into MyApp project.

The stdlib libraries modules are under heavy development and will grow as MyApp grow. Hence I do not want to push them into a maven repository everytime I make a little change.

So is there a possibility to link other gradle projects somehow? Im looking for a temporarly solution. I will push the std library into maven repository once the source is stable.

Also, as workaround, a solution with sourceSet would be possible. I have also considered to make a libraries folder in MyApp who is a symlink to stdlib, but I didnt get it to work as expected:

  • MyApp (path is /Users/foo/workspace/MyApp)
    • app (path is /Users/foo/workspace/MyApp/app)
    • libraries (symlink to /Users/foo/workspace/stdlib)
 dependencies {       compile project(':libraries:dagger')     } 

Any idea how to solve such a dependency in gradle?

like image 277
sockeqwe Avatar asked Jul 26 '14 21:07

sockeqwe


People also ask

Does Gradle dependencies order matter?

This isn't necessary. The order inside the dependencies { } block is preserved. You are kind of right. Dependency ordering is preserved, but for example all compile dependencies will be before testCompile dependencies no matter of how you order them.

Where should I add dependencies in Gradle project?

Gradle declares dependencies on JAR files inside your project's module_name /libs/ directory (because Gradle reads paths relative to the build.gradle file). This declares a dependency on version 12.3 of the "app-magic" library, inside the "com.example.android" namespace group.


1 Answers

You can include an outside root project module using 'settings.gradle' file from your main project. It must to be a gradle project too and in the specific Android building situation, you must configure every module as an "android-library" plugin project.

For example, in 'MyApp' project settings.gradle you can try this:

include 'app' include 'dagger' project(':dagger').projectDir = new File('/Users/foo/workspace/stdlib/dagger') 

Your 'MyApp' build.gradle must reflect the need of the 'dagger' module in a relative path Gradle way:

dependencies {   compile project(':dagger') } 

And that's it. Repeat this step with every external module you need and you'll have a proper Gradle multi-project configuration.

like image 69
Martin Revert Avatar answered Oct 06 '22 00:10

Martin Revert