Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Provided dependencies using Gradle (JetGradle) and Intellij Idea 13

I have a multiproject build with multiple war modules that depends on one jar module.

Both war and jar modules have dependencies over libraries like Spring, Hibernate and so on, those dependencies are defined as providedCompile on the war modules and as compile on the jar.

The problem is that when JetGradle updates the dependencies all artifacts have errors, as the dependencies from the jar module are required on the artifacts.

I would like to use any of this solutions:

  1. Include the libraries on the lib folder of the server and have Intellij treat them as provided.
  2. Include the libraries as project wide libraries somehow, so intellij puts them on all artifacts even after the gradle dependencies are updated.

On the other hand my approach could be completely wrong from the beginning.

The dependencies in the war modules are defined as:

providedCompile 'org.slf4j:slf4j-log4j12:1.7.5'
providedCompile 'org.slf4j:jcl-over-slf4j:1.7.5'
...
compile(project(':jarModule')) {transitive = false}
...

The dependencies in the jar module are defined as:

...
compile 'org.slf4j:slf4j-log4j12:1.7.5'
compile 'org.slf4j:jcl-over-slf4j:1.7.5'
...
like image 309
Adrian Lopez Avatar asked Dec 06 '13 10:12

Adrian Lopez


1 Answers

The best solution I found was to set the transitive "compile" dependencies from the jar module as provided using the following code in the Gradle configuration file:

apply plugin: 'idea'

configurations {
    provided
    provided.extendsFrom(compile)
}

idea {
    module {
        scopes.PROVIDED.plus += configurations.provided
    }
}

For Gradle 2.0+ modify the last bit to be like this:

idea {
    module {
        scopes.PROVIDED.plus += [configurations.provided]
    }
}

This solution works using the Intellij Gradle plugin and also the idea task in Gradle

I got this solution working based on the info on this urls: https://github.com/Netflix/RxJava/pull/145 http://www.gradle.org/docs/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.html

I hope this helps someone else

like image 159
Adrian Lopez Avatar answered Oct 06 '22 05:10

Adrian Lopez