我有两个模块,第一个运行Spring boot Application,第二个是EventListener,它在上下文启动时从资源加载文件。所有这些模块都可以单独很好地工作,但是我想在第一个模块(Spring启动模块)中包含事件侦听器模块,以便在运行上下文时从第一个模块的资源中获取所有文件。
我的具有setting.gradle的主模块:
allprojects {
buildDir = file("${rootDir}/build")
group = 'com.example'
version = "0.1.1"
}
subprojects {
apply plugin: 'java'
apply plugin: 'maven'
}
setting.gradle
rootProject.name = 'test-application'
include 'bootApplication'
include 'eventListener'
project(":eventListener").projectDir = file("C:/examples/eventListener")
我的bootApplication.gradle:
plugins {
id 'org.springframework.boot' version '2.2.1.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group 'com.example.bootApplication'
version = "0.1.1"
sourceCompatibility = '11'
targetCompatibility = '11'
repositories {
jcenter()
mavenLocal()
mavenCentral()
}
bootJar {
baseName("bootApplication")
}
jar {
enabled = true
}
dependencies {
compile project(":eventListnere")
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'io.springfox:springfox-swagger2:+'
implementation 'io.springfox:springfox-swagger-ui:+'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
还有我的eventListener:
plugins {
id 'org.springframework.boot' version '2.2.1.RELEASE'`enter code here`
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group 'com.example.eventlistener'
version '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
targetCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
ext {
spring_boot_version = '2.2.1.RELEASE'
}
implementation "org.springframework.boot:spring-boot-starter:$spring_boot_version"
compileOnly 'org.projectlombok:lombok:1.18.8'
annotationProcessor 'org.projectlombok:lombok:1.18.8'
testImplementation "org.springframework.boot:spring-boot-starter-test:$spring_boot_version"
testCompile group: 'junit', name: 'junit', version: '4.12'
}
jar.enabled = true
当我运行bootApplication主类时,它将在根构建目录中创建一个eventlistener-.jar文件。但是eventlistener模块不检查资源文件夹,我猜它没有看到bootApplication上下文。也许应该将其收集到一个jar文件中?看来我错过了gradle构建文件中的某些内容。
答案 0 :(得分:0)
我将在前面加上这句话,以为我不知道以下内容是否是造成您问题的真正原因。但是无论如何,您都应该更改一些与jar配置有关的事情。
Spring Boot Gradle插件用于从项目中创建一个胖子。默认情况下,它禁用常规的jar
任务。
您正在通过jar.enabled = true
重新启用正常的jar任务,这很好。但是,您还需要给它起另一个名字,因为一个名字会覆盖另一个名字。例如,对于您的eventListener
项目,您可以这样做:
// eventListener/build.gradle
bootJar {
classifier = 'boot'
}
但是,如果eventListener
实际上不是独立的可执行文件,则无需从中创建启动jar。因此,除非您将插件用于其他用途,否则我将其完全从eventListener中删除:
// eventListener/build.gradle
plugins {
// id 'org.springframework.boot' version '2.2.1.RELEASE'`enter code here` <-- Remove this
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
您仍然可以在项目中使用Spring Boot启动器,只是不需要插件即可重新打包jar。
同样的情况也适用于您的bootApplication
项目:两者都试图与普通jar同时创建胖可执行jar。一个将覆盖另一个。在这种情况下,您可能不需要普通的jar,因此应再次禁用jar
任务:
// eventListener/build.gradle
// jar.enabled = true <-- Remove this
最后,将compile project(":eventListnere")
替换为implementation project(":eventListener")
,将testCompile
替换为testImplementation
,以避免出现过时警告。不推荐使用maven
插件,而推荐使用maven-publish
。除非您与使用mavenLocal()
构建的本地Maven项目集成,否则您可能还可以摆脱mvn install
。
eventListener
,如果正确包装为bootApplication
胖子罐中的普通罐子,则应该能够访问其自己的resource
文件夹中的资源从bootApplication
开始运行。