首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Gradle子项目依赖关系不起作用,但在主等级中相同的依赖关系工作得很好。

Gradle子项目依赖关系不起作用,但在主等级中相同的依赖关系工作得很好。
EN

Stack Overflow用户
提问于 2019-05-08 19:37:25
回答 2查看 958关注 0票数 0

我一直在为弹簧引导设备的多模块分级项目工作。这是github回购- GitHub回购

代码语言:javascript
复制
-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(主等级)的样子:-

代码语言:javascript
复制
            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引导应用程序将在端口8000上启动并继续运行。

但是,当我在spring-boot-dev-tools.gradle中按照gradle脚本移动时,就会遇到问题,然后我的spring引导应用程序就会像普通的spring引导应用程序一样启动和关闭。

代码语言:javascript
复制
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引导在端口上不能工作/运行:8000,但是它像普通的spring引导应用程序一样启动和关闭。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-10 17:46:08

我设法使它发挥作用,但解决办法显然是感觉不太好。但无论如何,这就是我所做的-

  1. 我将子项目/模块依赖项转移到它自己的gradle文件中,并将其从build.gradle(主项目级)中删除。
  2. 我不再使用“编译项目”,而是改用“实现”。 配置{ developmentOnly runtimeClasspath { extendsFrom developmentOnly }依赖{实现{extendsFrom‘:spring app’developmentOnly}}
票数 0
EN

Stack Overflow用户

发布于 2019-05-09 16:19:04

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

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

还有一些需要考虑的建议:

  • 定义一个通用的分级配置,而不是“所有项目”和“子项目”关键字。这两者之间的区别归结为组合重于继承
  • 使用关键字implementation代替编译。这样,依赖项就不会泄漏到使用者的编译类路径中。否则使用关键字api
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56047894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档