Gradle 多模块项目:将模块依赖项应用于除自身之外的所有子项目

Mar*_*ies 2 spring circular-dependency subproject gradle multi-module

我的应用程序是一个 Gradle 多模块项目,由多个服务和一个服务通用模块组成。

\n\n

I\xc2\xb4ve 将所有模块共有的所有依赖项提取到根 build.gradle 中,并且我还想在所有子项目中包含service-common模块,这在理论上是可行的,但 I\xc2\xb4m 得到了循环依赖问题,因为它包含在其自身中。

\n\n
apply plugin: \'java\'\n\ngroup = \'com.myapplication\'\n\next {\n    set(\'springCloudVersion\', "2.2.0.RELEASE")\n    set(\'springBootVersion\', "2.2.2.RELEASE")\n}\n\nallprojects {\n\n    repositories {\n        jcenter()\n        mavenCentral()\n        maven { url \'https://repo.spring.io/milestone\' }\n    }\n\n}\n\nbuildscript {\n    ext {\n        springBootVersion = "2.2.2.RELEASE"\n    }\n\n    repositories {\n        maven { url \'https://repo.spring.io/plugins-snapshot\' }\n        jcenter()\n        mavenCentral()\n    }\n\n    dependencies {\n        classpath \'io.spring.gradle:dependency-management-plugin:1.0.7.BUILD-SNAPSHOT\'\n        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")\n    }\n}\n\nsubprojects {\n    version = \'1.0\'\n\n    apply plugin: \'org.springframework.boot\'\n    apply plugin: "io.spring.dependency-management"\n    apply plugin: \'java\'\n\n    ext {\n        springCloudVersion = "2.2.0.RELEASE"\n        springBootVersion = "2.2.2.RELEASE"\n    }\n\n    test {\n        useJUnitPlatform()\n    }\n\n    repositories {\n        mavenCentral()\n        jcenter()\n        maven { url \'https://repo.spring.io/milestone\' }\n    }\n\n    dependencyManagement {\n        imports {\n            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"\n        }\n    }\n\n    dependencies {\n        compile group: \'org.springframework.boot\', name: \'spring-boot-starter\', version: "${springBootVersion}"\n        compile group: \'org.springframework.boot\', name: \'spring-boot-starter-actuator\', version: "${springBootVersion}"\n        compile group: \'org.springframework.boot\', name: \'spring-boot-starter-security\', version: "${springBootVersion}"\n        compile group: \'org.springframework.boot\', name: \'spring-boot-starter-data-jpa\', version: "${springBootVersion}"\n        compile group: \'org.springframework.boot\', name: \'spring-boot-starter-jdbc\', version: "${springBootVersion}"\n        compile group: \'org.springframework.boot\', name: \'spring-boot-starter-web\', version: "${springBootVersion}"\n        compile group: \'org.springframework.boot\', name: \'spring-boot-starter-logging\', version: "${springBootVersion}"\n        compile group: \'org.springframework.cloud\', name: \'spring-cloud-starter\', version: "${springCloudVersion}"\n        compile group: \'org.springframework.cloud\', name: \'spring-cloud-starter-kubernetes\', version: \'1.1.1.RELEASE\'\n\n        compile group: \'io.micrometer\', name: \'micrometer-registry-prometheus\', version: \'1.3.2\'\n\n        compile group: \'com.github.piomin\', name: \'logstash-logging-spring-boot-starter\', version: \'1.2.2.RELEASE\'\n\n        compile group: \'io.springfox\', name: \'springfox-swagger2\', version: \'2.9.2\'\n        compile group: \'io.springfox\', name: \'springfox-swagger-ui\', version: \'2.9.2\'\n\n        compileOnly \'org.projectlombok:lombok:1.18.10\'\n        annotationProcessor \'org.projectlombok:lombok:1.18.10\'\n\n        testCompile group: \'com.h2database\', name: \'h2\', version: \'1.4.200\'\n        compile group: \'org.postgresql\', name: \'postgresql\', version: \'42.2.9\'\n\n        testCompile group: \'org.springframework.cloud\', name: \'spring-cloud-stream-test-support\', version: "${springCloudVersion}"\n\n        implementation project(":service-common")\n    }\n\n}\n\nconfigurations {\n    compileOnly {\n        extendsFrom annotationProcessor\n    }\n}\n\nrepositories {\n    mavenCentral()\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何排除service-common模块的实现项目(":service-common")

\n

Fra*_*teo 5

你可以这样做:

subprojects {
    dependencies {
        if (!project.name == "service-common") {
            implementation(project(":service-common"))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 未找到名称为“implementation”的配置。 (5认同)