我一直在为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(主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-boot-starter-web
和spring-boot-devtools
依赖项时总结了我的问题,则弹簧启动无法在port:8000上运行/运行,而是像正常的弹簧一样启动和关闭启动应用程序。
答案 0 :(得分:0)
您是否有理由在每个单独的Java包中定义主类?
我最近制作了一个模块化的整体示例,该示例可能会对您有所帮助: ECMAScript® 2016 Language Specification
还有一些要考虑的技巧:
定义通用的gradle配置,而不是“ allprojects”和“ subprojects”关键字。两者之间的差异归结为modular monolith example
使用关键字实现代替编译。这样,您的依赖项就不会再泄漏到使用者的编译类路径中了。否则,使用关键字 api
答案 1 :(得分:0)
我设法使其正常运行,但解决方案显然对我来说并不好。但是无论如何,这就是我所做的-
我改用“实现”代替了“编译项目”
configurations {
developmentOnly
runtimeClasspath {
extendsFrom developmentOnly
}
}
dependencies {
implementation {
'org.springframework.boot:spring-boot-devtools'
':spring-boot-app'
'org.springframework.boot:spring-boot-starter-web'
}
}