【问题标题】:Gradle subproject dependecies does not work but same dependencies works fine in main gradleGradle 子项目依赖项不起作用,但相同的依赖项在主 gradle 中工作正常
【发布时间】:2019-05-08 19:37:25
【问题描述】:

我一直在为 spring boot devtools 开发多模块 gradle 项目。这是 github 存储库 - GitHub Repo

-spring-boot-dev-tools
-src/main
    -java/com/jhooq/springboot/devtools
    -resources
    -spring-boot-dev-tools.gradle ====- subproject gradle 
-.gitignore
-build.gradle ====- main gradle
-gradlew
-gradlew.bat
-settings.gradle

这就是我的 build.gradle(main gradle) 的样子:-

            buildscript {
            ext {
                    springBootVersion = '2.1.2.RELEASE'
                }
                repositories {
                    mavenCentral()
                }
                dependencies {
                    classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
                }
                        }
            allprojects {
                group 'com.jhooq'
                version '1.0-SNAPSHOT'
            }
            subprojects{
                repositories {
                    mavenCentral()
                }
                apply plugin: 'java'
                apply plugin: 'idea'
                apply plugin: 'org.springframework.boot'
                apply plugin: 'io.spring.dependency-management'

                sourceCompatibility = 1.8
                targetCompatibility = 1.8

                dependencies {
                    compile ("org.springframework.boot:spring-boot-starter")
                    compile ("org.springframework.boot:spring-boot-starter-test")
                }
            }
            project(':spring-boot-dev-tools'){

                configurations {
                    developmentOnly
                    runtimeClasspath {
                        extendsFrom developmentOnly
                    }
                }

                dependencies {
                    compile project(':spring-boot-app')
                    compile ("org.springframework.boot:spring-boot-starter-web")
                    developmentOnly("org.springframework.boot:spring-boot-devtools")
                }

            }

如您所见,如果我将 compile ("org.springframework.boot:spring-boot-starter-web") 放入 project(':spring-boot-dev-tools') 中,我的 Spring Boot 应用程序在端口 8000 上启动并继续运行

但是当我在 spring-boot-dev-tools.gradle 中移动以下 gradle 脚本时遇到问题,然后我的 Spring Boot 应用程序会像正常的 Spring Boot 应用程序一样启动和关闭。

project(':spring-boot-dev-tools'){

                configurations {
                    developmentOnly
                    runtimeClasspath {
                        extendsFrom developmentOnly
                    }
                }

                dependencies {
                    compile project(':spring-boot-app')
                    compile ("org.springframework.boot:spring-boot-starter-web")
                    developmentOnly("org.springframework.boot:spring-boot-devtools")
                }

因此,如果我在子模块中移动 spring spring-boot-starter-webspring-boot-devtools 依赖项时总结了我的问题,spring boot 无法在端口:8000 上工作/运行,而是像普通的 spring boot 应用程序一样启动和关闭。

【问题讨论】:

  • 所以您尝试将一些文件内容从您的大build.gradle 文件移动到另一个文件?您确定移动代码后包含其他文件吗?也许添加一个简单的println 语句来检查。
  • 是的,我试图将文件的内容移动到另一个文件(子模块 gradle 文件),是的,我在移动代码后检查了其他文件是否包含在内。今天我能够解决这个问题,这让我很伤心,因为我没有“编译项目”而是切换到“实施”,一切似乎都很完美。请看下面我的回答

标签: java spring spring-boot gradle


【解决方案1】:

您是否有理由在每个单独的 Java 包中定义主类?

我最近做了一个模块化单体示例,它可能会对您有所帮助: modular monolith example

还有一些需要考虑的提示:

  • 定义一个通用的 gradle 配置而不是“allprojects”和“subprojects”关键字。这两者之间的区别归结为composition over inheritance

  • 使用关键字 implementation 而不是 compile。这样,您的依赖项就不会再泄漏到消费者的编译类路径中了。否则使用关键字 api

【讨论】:

  • 感谢 carl,我从编译切换到实现,这次成功了。我在下面发布了解决方案。
【解决方案2】:

我设法让它工作,但解决方案显然对我来说感觉不好。但无论如何,这就是我所做的 -

  1. 我将子项目/模块依赖项移至其自己的 gradle 文件,并将其从 build.gradle(主项目 gradle)中删除
  2. 我切换到“实现”而不是“编译项目”

            configurations {
                developmentOnly
                runtimeClasspath {
                    extendsFrom developmentOnly
                }
            }
    
            dependencies {
                implementation {
                    'org.springframework.boot:spring-boot-devtools'
                    ':spring-boot-app'
                    'org.springframework.boot:spring-boot-starter-web'
    
                }
            }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多