Provided dependencies using Gradle (JetGradle) and Intellij Idea 13

前端 未结 3 1947
死守一世寂寞
死守一世寂寞 2021-02-14 02:12

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 an

相关标签:
3条回答
  • 2021-02-14 02:34

    Adding to the answer from Adrijardi, for Gadle 2.0 + not only did I have to change

    scopes.PROVIDED.plus += configurations.provided
    

    to

    scopes.PROVIDED.plus += [configurations.provided]
    

    I also had to change

    provided project(":module-name") {
        transitive = false
    }
    

    to

    provided (project(":module-name")) {
        transitive = false
    }
    

    Note the extra set of brackets on the second code sample

    0 讨论(0)
  • 2021-02-14 02:37

    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

    0 讨论(0)
  • 2021-02-14 02:44

    I tried the above solution but found a problem. In my scenario I had a sub-project that had the above configuration. The problem was that the transitive dependencies of the sub-project were not being exported in the IntelliJ configuration, which caused the base project to stop compiling.

    I did some digging around and stumbled upon this little gem which fixed the problem.

    https://github.com/gradle/gradle/blob/ccddc438ce09293d84030ebe31668d739c8a228a/gradle/providedConfiguration.gradle

    /**
     * Adds a configuration named 'provided'. 'Provided' dependencies
     * are incoming compile dependencies that aren't outgoing
     * dependencies. In other words, they have no effect on transitive
     * dependency management.
     */
    
    configurations {
        provided
        providedPlusCompile.extendsFrom(compile, provided)
        testCompile.extendsFrom(providedPlusCompile)
    }
    
    sourceSets.main {
        compileClasspath = configurations.providedPlusCompile
    }
    
    plugins.withType(IdeaPlugin) {
        idea.module.scopes.PROVIDED.plus = [ configurations.provided ]
    }
    
    0 讨论(0)
提交回复
热议问题